जावा मेमोरी मॉडल की शुरूआत के बाद, स्विंग दिशानिर्देशों को राज्य में बदल दिया गया था कि गैर-प्रकाशित इंस्टेंस स्थिति से बचने के लिए किसी भी स्विंग घटकों को ईडीटी पर तुरंत चालू करने की आवश्यकता है।क्या इसे गैर-ईडीटी थ्रेड में स्विंग कक्षाएं लोड करने की अनुमति है?
मुझे कहीं भी नहीं मिला कि क्या ईडीटी पर क्लासलोडिंग भी अनिवार्य है या क्या हम पृष्ठभूमि धागे में कुंजी स्विंग कक्षाओं को प्री-लोड कर सकते हैं? क्या इस पर सूर्य/ओरेकल से कोई आधिकारिक बयान है? क्या कोई कक्षाएं हैं जो गैर-थ्रेडसेफ स्थैतिक स्थिति को पकड़ने के लिए जानी जाती हैं, इसलिए ईडीटी पर लोड होने की आवश्यकता है?
नेमी के प्रश्न को संबोधित करने के लिए स्पष्टीकरण: यह एक व्यावहारिक मुद्दा है। हमारे एप्लिकेशन के स्टार्टअप समय का एक बड़ा हिस्सा, क्लासलोडिंग और ईडीटी पर फ़ॉन्ट/छवि-लोडिंग बिताया जाता है। इनमें से अधिकांश को स्विंग और संबंधित पुस्तकालयों के लिए जिम्मेदार ठहराया जा सकता है।
यहां कुछ पृष्ठभूमि है: कई अन्य स्विंग ऐप्स के रूप में, स्टार्टअप पर हम UI को अधिक उत्तरदायी बनाने के लिए कई रूपों का निर्माण कर रहे हैं। प्रोफाइलिंग के बाद, हमने पाया कि फॉर्म निर्माण के लिए वास्तविक समय अपेक्षाकृत तेज़ है - सभी कक्षाओं और फोंटों की धीमी गति क्या है (डिस्क पढ़ने धीमी ऑन-एक्सेस वायरस स्कैनर, निगरानी स्कैनर, ऑडिट ट्रैकर और भगवान के साथ कॉर्पोरेट सेटअप में है एचडीडी चालक पर और क्या लगाया गया)।
हमने पृष्ठभूमि धागे (स्विंग के नियमों का उल्लंघन करने) में एक ही रूपों का निर्माण करने की कोशिश की और फिर उन्हें फेंक दिया। एक बार जब हम कर लेंगे तो हम ईडीटी पर एक ही फॉर्म का निर्माण करेंगे, जो कि सभी वर्गों को लोड किया जाता है और डिस्क फ़ाइलों में कोई अन्य फाइलें होती हैं। यह हमारे लिए काम करता है, और हम शायद तब तक ऐसा करेंगे जब तक कि कुछ वास्तव में बुरा न हो।
मैं क्या पूछ रहा हूं कि यह एक सुरक्षित अभ्यास है, एक अच्छा अभ्यास है या हैक?
विशेष रूप से, दो सिंगलटन कक्षाएं मैं UIManager और AppContext थे के बारे में सोच सकते हैं। दोनों javadocs यह नहीं बताते हैं कि वे थ्रेडसेफ होना चाहिए। ऐपकॉन्टेक्स्ट ठीक से सिंक्रनाइज़ दिखता है, सिवाय इसके कि isDisposed() विधि राज्य को ठीक से नहीं पढ़ती है (सिंक्रनाइज़ेशन की आवश्यकता है)। UIManager सभी के लिए नि: शुल्क है, हालांकि एक बार ईडीटी शुरू होने के बाद, मुझे नहीं लगता कि कोई अन्य धागा इसे बदल देगा। – ddimitrov
यह एक दिलचस्प सवाल है। क्या यह पूरी तरह अकादमिक है, या क्या कोई वास्तविक समस्या है जिसे आप हल करने की कोशिश कर रहे हैं? मैं एक अच्छा कारण नहीं सोच सकता कि आप ऐसा करना चाहते हैं। – Nemi
@Nemi, प्रश्न – ddimitrov