दिलचस्प पोस्ट
ओरेकल में किसी तालिका से कॉलम नाम कैसे प्राप्त हो सकते हैं? LINQ को इकाईयों को 'डबल पार्स (सिस्टम। स्ट्रिंग)' विधि की पहचान नहीं है, और इस पद्धति को किसी स्टोर अभिव्यक्ति में अनुवाद नहीं किया जा सकता है क्या किसी को कभी भी काम करने के लिए एक दूरस्थ जेएमएक्स JConsole मिला है? एएसपी.नेट एमवीसी में सत्र चर स्थानीय कंप्यूटर का आईपी पता प्राप्त करें जावास्क्रिप्ट में ओवरलोडिंग अंकगणित ऑपरेटर्स? आप बाहरी जावा वर्गों को गतिशील रूप से कैसे संकलित और लोड करते हैं? jquery चेतन पृष्ठभूमि की स्थिति मैं कैसे जांच सकता हूं कि कोई शब्द PHP का उपयोग करते हुए किसी अन्य स्ट्रिंग में है? मल्टीप्रोसेसिंग बनाम थ्रेडिंग पायथन दो तिथियों (दिनों की संख्या) के बीच अंतर की गणना करें? वर्गों के बीच परिपत्र निर्भरता के कारण निर्माण त्रुटियों का समाधान करें नियमित अभिव्यक्ति में क्या विशेष पात्रों को बचाना चाहिए? कैसे जावा में एक बहुआयामी ArrayList बनाने के लिए? जावास्क्रिप्ट: बंद लूप का?

कचरा संग्रह के लिए स्थिर फ़ील्ड खुली हैं?

एक काल्पनिक उपयोगिता वर्ग को देखते हुए जिसे केवल कार्यक्रम सेटअप में उपयोग किया जाता है:

class MyUtils { private static MyObject myObject = new MyObject(); /*package*/static boolean doStuff(Params... params) { // do stuff with myObject and params... } } 

क्या मेरी ऑबजेक्ट को कचरा एकत्रित किया जाना चाहिए, जब यह अब उपयोग नहीं किया जा रहा है, या यह कार्यक्रम के जीवन के लिए चारों ओर रह जाएगा?

वेब के समाधान से एकत्रित समाधान "कचरा संग्रह के लिए स्थिर फ़ील्ड खुली हैं?"

स्थैतिक चर का चयन कचरा संग्रह के लिए नहीं किया जा सकता, जबकि कक्षा लोड हो रहा है। वे तब एकत्र किए जा सकते हैं जब संबंधित वर्ग लोडर (जो इस वर्ग को लोड करने के लिए जिम्मेदार था) खुद कचरा के लिए एकत्र किया जाता है।

जेएलएस धारा 12.7 की जाँच करें क्लासेस और इंटरफेस के उतार-चढ़ाव

एक क्लास या इंटरफ़ेस अनलोड हो सकता है यदि और केवल परिभाषित क्लास लोडर को कचरा कलेक्टर द्वारा पुनः प्राप्त किया जा सकता है […] बूटस्ट्रैप लोडर द्वारा लोड किए गए क्लासेस और इंटरफेस अनलोड नहीं किए जा सकते हैं।

स्टेटस चर का वर्गीकरण क्लास ऑब्जेक्ट्स द्वारा संदर्भित किया जाता है जिसे क्लासलाउडर द्वारा संदर्भित किया जाता है- या तो क्लासलोडर किसी भी तरह क्लास को छोड़ देता है (यदि वह भी संभव है) या कक्षाओलोडर स्वयं संग्रह के लिए योग्य हो जाता है (अधिक संभावना – वेबपॉड उतारने के बारे में सोचें) स्थिर चर (या बल्कि, जिन वस्तुओं का वे संदर्भ करते हैं) एकत्र नहीं किए जाएंगे।

यदि आप अस्थायी ऑब्जेक्ट का उपयोग करना चाहते हैं, तो स्थैतिक आरंभीकरण के लिए इस्तेमाल किया जाए, तो आप एक स्थिर प्रारंभिक ब्लॉक का उपयोग कर सकते हैं, उदा।

 class MyUtils { static { MyObject myObject = new MyObject(); doStuff(myObject, params); } static boolean doStuff(MyObject myObject, Params... params) { // do stuff with myObject and params... } } 

चूंकि स्थिर प्रारंभिक ब्लॉक एक विशेष प्रकार की स्थिर विधि है, myObject एक स्थानीय चर है और ब्लॉक निष्पादित करने के बाद ब्लॉक एकत्र किया जा सकता है।

myObject एक संदर्भ है और एक ऑब्जेक्ट नहीं है । कोई ऑब्जेक्ट स्वचालित रूप से संग्रहित कचरा है जब कोई संदर्भ नहीं बताता है क्योंकि यह पहुंच से बाहर नहीं है

तो भी एक स्थैतिक संदर्भ "myObject" के पीछे ऑब्जेक्ट कचरा एकत्र किया जा सकता है यदि आप इसके साथ dereference

 myObject = null; 

और इस ऑब्जेक्ट के लिए कोई अन्य संदर्भ नहीं है

हालांकि स्थिर संदर्भ और चर आपके कार्यक्रम के जीवनकाल के लिए बने रहते हैं।

मुझे लगता है कि यह आपके प्रश्न का उत्तर देता है – मूल रूप से नहीं जब तक कि क्लास किसी विशेष वर्ग के लोडर से नहीं आता है और वह क्लास को अनलोड करता है