यदि किसी स्ट्रिंग को संकलन समय पर शाब्दिक के रूप में परिभाषित किया गया है [उदा: String str = "java";
] तो क्या यह कचरा एकत्रित होगा?
शायद नहीं। कोड ऑब्जेक्ट्स में String
ऑब्जेक्ट्स में एक या अधिक संदर्भ होंगे जो अक्षर का प्रतिनिधित्व करते हैं। इसलिए जब तक कोड ऑब्जेक्ट पहुंच योग्य हो, तब तक String
ऑब्जेक्ट्स होंगे।
कोड ऑब्जेक्ट्स पहुंचने योग्य नहीं है, लेकिन केवल तभी जब वे गतिशील रूप से लोड हो जाएं ... और उनका क्लासलोडर नष्ट हो गया है।
यदि मैं आंतरिक विधि का उपयोग करता हूं [ई।जी: String str = new String("java").intern()
] तो क्या यह कचरा इकट्ठा होगा?
वस्तु intern
कॉल द्वारा दिया एक ही वस्तु है कि "java"
स्ट्रिंग शाब्दिक प्रतिनिधित्व किया जाएगा। ("java"
शाब्दिक समय वर्ग लोड हो रहा है पर प्रशिक्षु है। आप तो प्रशिक्षु अपने कोड स्निपेट में नवनिर्मित String
वस्तु है, यह देखने और वापस आ जाएगी जब पहले से "java"
स्ट्रिंग प्रशिक्षु।)
हालांकि, तार उस के साथ समान नहीं हैं प्रशिक्षु स्ट्रिंग अक्षर पहुंचने के बाद कचरा इकट्ठा किया जा सकता है। PermGen space कचरा सभी हालिया हॉटस्पॉट JVMs पर एकत्रित है। (पहले जावा 8 ... जो PermGen पूरी तरह से चला जाता है के लिए।)
यह भी बिंदु में स्ट्रिंग शाब्दिक से अलग ढंग से व्यवहार किया जाएगा 1.
नहीं ... क्योंकि यह एक ही वस्तु के रूप में है स्ट्रिंग शाब्दिक।
और वास्तव में, एक बार जब आप समझते हैं कि क्या हो रहा है, तो यह स्पष्ट है कि स्ट्रिंग अक्षर का विशेष रूप से इलाज नहीं किया जाता है। यह सिर्फ "पहुँचता" शासन के एक आवेदन पत्र है ...
कुछ स्थानों यह उल्लेख किया गया है कि शाब्दिक कचरा केवल एकत्र किया जाएगा जब String
वर्ग उतार दिया जाएगा? क्या यह समझ में आता है क्योंकि मुझे नहीं लगता कि String
कक्षा कभी भी अनलोड नहीं की जाएगी।
आप सही हैं। यह समझ में नहीं आता है। सूत्रों ने कहा कि गलत हैं। (यदि आप एक यूआरएल पोस्ट करते हैं तो यह सहायक होगा ताकि हम पढ़ सकें कि वे खुद के लिए क्या कह रहे हैं ...)
स्रोत
2013-03-10 16:15:37
1 - http://stackoverflow.com/questions/2202162/garbage-collection-and-strings; 2 - http://stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java; 3 - स्ट्रिंग ए = न्यू स्ट्रिंग ("asd") -> "ए" संदर्भ कचरा एकत्रित किया जाएगा, लेकिन केवल "asd" और "asd" का संदर्भ हमेशा के लिए होगा। – user1050755
यदि आप अधिक खोज करते हैं तो आपको यह पता चल जाएगा कि इंटर्न का उपयोग करके बनाए गए स्ट्रिंग अक्षर कचरा हो सकते हैं क्योंकि वे कमजोर संदर्भ का उपयोग करते हैं लेकिन मैं इसकी पुष्टि नहीं कर सकता और यही कारण है कि मैंने पोस्ट किया है क्योंकि बहुत सारे मिश्रित प्रतिक्रियाएं हैं। – Lokesh