स्थैतिक विधियाँ (वास्तव में सभी विधियाँ) और साथ ही स्थिर चर भी इसमें संचित हैं PermGen
ढेर खंड , क्योंकि वे प्रतिबिंब डेटा (वर्ग से संबंधित डेटा, उदाहरण से संबंधित नहीं) का हिस्सा हैं।
स्पष्टीकरण के लिए अपडेट करें :
ध्यान दें कि केवल चर और उनके तकनीकी मूल्य (प्राइमेटीज़ या संदर्भ) PermGen अंतरिक्ष में संग्रहीत हैं।
यदि आपका स्टैटिक वेरिएबल किसी ऑब्जेक्ट का संदर्भ है जो ऑब्जेक्ट हीप के सामान्य वर्गों (युवा / पुरानी पीढ़ी या उत्तरजीवी स्थान) में संग्रहीत है। वे वस्तुएं (जब तक कि वे आंतरिक वस्तुएं जैसे कक्षाएं आदि) नहीं हैं पर्मगेन स्थान में संग्रहीत होती ।
उदाहरण:
static int i = 1; //the value 1 is stored in the PermGen section
static Object o = new SomeObject(); //the reference(pointer/memory address) is stored in the PermGen section, the object itself is not.
कचरा संग्रहण पर एक शब्द:
करो नहीं पर भरोसा करते हैंfinalize()
क्योंकि इसे चलाने की गारंटी नहीं है। कचरा संग्रहण के लिए कब और क्या इकट्ठा करना है, यह तय करना जेवीएम के लिए पूरी तरह से है, भले ही कोई वस्तु कचरा संग्रहण के लिए योग्य हो।
बेशक आप एक स्थिर चर को शून्य करने के लिए सेट कर सकते हैं और इस प्रकार ढेर पर ऑब्जेक्ट के संदर्भ को हटा सकते हैं लेकिन इसका मतलब यह नहीं है कि कचरा संग्रहकर्ता इसे इकट्ठा करेगा (भले ही अधिक संदर्भ न हों)।
इसके अतिरिक्त finalize()
, केवल एक बार चलाया जाता है, इसलिए आपको यह सुनिश्चित करना होगा कि यह अपवादों को नहीं फेंके या अन्यथा वस्तु को एकत्र होने से रोके। यदि आप कुछ अपवाद के माध्यम से अंतिम रूप से रोकते हैं, finalize()
तो दूसरी बार उसी वस्तु पर लागू नहीं किया जाएगा।
एक अंतिम नोट : कोड, रनटाइम डेटा आदि को कैसे संग्रहीत किया जाता है यह जेवीएम पर निर्भर करता है जिसका उपयोग किया जाता है, अर्थात हॉटस्पॉट इसे JRockit से अलग तरीके से कर सकता है और यह समान JVM के संस्करणों के बीच भिन्न हो सकता है। उपरोक्त जावा 5 और 6 के लिए हॉटस्पॉट पर आधारित है (जो मूल रूप से समान हैं) उत्तर देने के समय से मैं कहूंगा कि अधिकांश लोग उन जेवीएम का उपयोग करते थे। Java 8 के रूप में मेमोरी मॉडल में बड़े बदलाव के कारण, ऊपर दिए गए कथन Java 8 HotSpot के लिए सही नहीं हो सकते हैं - और मैंने Java 7 HotSpot के परिवर्तनों की जाँच नहीं की है, इसलिए मुझे लगता है कि उपरोक्त अभी भी उस संस्करण के लिए सही है, लेकिन मुझे यहां यकीन नहीं है।