दिलचस्प पोस्ट
अजगर में आइटम आवृत्ति गणना सरणी से नैन मान निकालना अजगर में कोशिश बनाम बनाम का उपयोग करना विंडोज 7 और विस्टा यूएसी – सी # में प्रोग्रामेंटल रूप से अनुरोध की ऊंचाई बुनियादी HTML दृश्य प्रस्तुत करना है? आप एक तेज दिनांक ऑब्जेक्ट कैसे बना सकते हैं JSF पृष्ठ में <h: form> कैसे उपयोग करें? एकल रूप? एकाधिक रूपों? नेस्टेड रूप? सख्त मानदंड: संदर्भ से केवल चर को पारित किया जाना चाहिए एंड्रॉइड कैसे अपनी उंगली के बाद एक चिकनी लाइन आकर्षित करने के लिए VB.NET या C # में itextsharp डीएलएल के साथ पीडीएफ सामग्री पढ़ना `नया फ़ंक्शन () 'कम केस के साथ" f "जावास्क्रिप्ट में एएएस 3 में मुख्य रूप से प्रमुख भूमिका निभाई गई है, जो वैक्टर प्रदान करने से अलग है? मौजूदा जीआईटी रिपॉजिटरी को एसवीएन में धकेलना एसक्यूएल स्विच / प्रकरण जहां खंड में datetime.parse और इसे एक विशिष्ट प्रारूप के साथ काम करना

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

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

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; 

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

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

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