दिलचस्प पोस्ट
सी # – माउस कर्सर छवि कैप्चरिंग जावा में एक अर्रे का प्रतिवर्ती क्या pthread_exit को मुख्य से कॉल करना ठीक है? Rails पर रूबी में has_many आइटम की संख्या को मान्य करें JDBC का उपयोग करते हुए मैं SQL Server 2008 डेटाबेस से कैसे जुड़ूं? मैं कैसे समाप्त करने के लिए एक एसिंक्रोनस प्रेषित ब्लॉक का इंतज़ार करूँ? केवल पीडीएफ में एक पीडीएफ़ में पृष्ठों की संख्या की गणना करें एंड्रॉइड गतिविधि को इन्स्तांत करने में असमर्थ: पथ पर वर्ग नहीं मिला एक्सएमएल सीरियललाइजेशन के जरिए आपको लोड किए जाने पर आप कैसे पता लगा सकते हैं? अपवाद पकड़ते समय आदेश क्यों करता है? प्रोटोटाइप AJAX अनुरोध को GET के बजाय ऑप्शन के रूप में भेजा जा रहा है; 501 त्रुटि में परिणाम मैं PHP के प्रयोग से प्रत्येक पंजीकृत उपयोगकर्ता को अपने यूआरएल को कैसे दे सकता हूं? डायनेमिक कोड निष्पादन एसक्यूएल: केवल शून्य मानों के साथ कॉलम का चयन करें अगर jquery लोड किया गया है, तो यह जांचें कि झूठी अगर यह लोड करें

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

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

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

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

Solutions Collecting From Web of "कचरा संग्रह के लिए स्थिर फ़ील्ड खुली हैं?"

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

जेएलएस धारा 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; 

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

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

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