2013-02-09 21 views
6

के लिए एक ऐरे में ड्रेफ्रेंसिंग ऑब्जेक्ट्स मैंने जावा कचरा कलेक्टर पर कुछ शोध किया है और समझते हैं कि एक ऑब्जेक्ट जिसे अब संदर्भित नहीं किया गया है उसे कचरा कलेक्टर द्वारा संभाला जाना चाहिए। सरणी के ऑब्जेक्ट्स के संदर्भ में, मुझे पता है कि सरणी में किसी स्थान पर एक नई ऑब्जेक्ट असाइन करना पहले आवंटित ऑब्जेक्ट को ठीक से डिलीकेट नहीं करता है।जावा कचरा संग्रह

  1. मैं जानना चाहता हूं कि स्थान एक्स पर किसी सरणी से किसी ऑब्जेक्ट को कैसे निकालें और ठीक से हटाया जाए और स्थान x पर एक ही सरणी को एक नई ऑब्जेक्ट असाइन करें।
  2. मैं यह भी जानना चाहूंगा कि सरणी को सही तरीके से कैसे हटाया जाए।

उत्तर

9

संभालने कहीं भी संग्रहीत एक ही वस्तु का कोई सन्दर्भ देखते हैं कि क्या कर सकते हैं null या किसी अन्य वस्तुओं के लिए यह कचरा संग्रहण के लिए पात्र बनाती एक सरणी में एक वस्तु की स्थापना,।

तो अगर आपके पास

Object[] array = new Object[5]; 
Object object = new Object() // 1 reference 
array[3] = object; // 2 references 
array[1] = object; // 3 references 


object = null; // 2 references 
array[1] = null; // 1 references 
array[3] = new Object(); // 0 references -> eligible for garbage collection 

array = null; // now even the array is eligible for garbage collection 
// all the objects stored are eligible too at this point if they're not 
// referenced anywhere else 

कचरा संग्रहण शायद ही कभी स्थानीय लोगों की स्मृति को पुनः प्राप्त होगा, हालांकि, तो कचरा संग्रहण ज्यादातर समारोह के दायरे से बाहर पहले से ही नहीं होगा।

+2

अच्छा जवाब। किसी ऑब्जेक्ट की नलिका किसी ऑब्जेक्ट के संदर्भ को हटा देती है और इसे कचरा संग्रह के लिए उम्मीदवार बनाता है। +1 – yams

0

अच्छी तरह से सभी ऑब्जेक्ट्स कचरा कलेक्टर द्वारा स्वचालित रूप से एकत्र किए जाएंगे जब उनका संदर्भ नहीं दिया जाएगा। आपको इसके बारे में चिल्लाना नहीं है। फिर भी यदि आप चाहते हैं कि आप सरणी को शून्य और जीसी के अगले भाग पर असाइन कर सकें, तो यह सरणी को आवंटित स्मृति को स्वयं ही हटा दिया जाएगा। जीसी स्पष्ट रूप से चल रहा है के लिए, आप

java.lang.Runtime.getRuntime().gc(); 
+3

आपको स्पष्ट रूप से कचरा कलेक्टर का आह्वान नहीं करना चाहिए जब तक कि आपके पास एक बहुत ही अच्छा कारण न हो। और वे बहुत दुर्लभ हैं। –

+3

"सिद्ध रूप से बहुत अच्छे कारण" का उदाहरण क्या है? –

1

जावा में आपको वस्तुओं को स्पष्ट रूप से अस्वीकार करने की आवश्यकता नहीं है, भले ही वे सरणी, या साधारण फ़ील्ड या चर से संदर्भ हों। एक बार ऑब्जेक्ट रूट सेट से दृढ़ता से पहुंचने योग्य नहीं है, कचरा संग्रह इसे जल्दी या बाद में हटा देगा। और आमतौर पर जीसी को अपना काम करने में मदद करने के लिए अनुचित है। अधिक जानकारी के लिए यह article पढ़ें।

0

ऑब्जेक्ट डी आवंटन वस्तु को रद्द करके बंद या खोलने पर होना चाहिए। जुनीट परीक्षण यह सुनिश्चित करने के लिए ऑब्जेक्ट्स पर जीसी पर जोर देते हैं कि सभी ऑब्जेक्ट्स कचरा इकट्ठा किया गया है। यदि कोई संदर्भ है तो जावा कचरा नहीं करेगा। मैं दृढ़ता से जुनीट परीक्षण करने की सिफारिश करता हूं।

संबंधित मुद्दे