2011-04-14 17 views
16

जावा में, एक पहुंच योग्य वस्तु क्या है? ऑब्जेक्ट कब पहुंच योग्य नहीं होता है? कचरा संग्रह का अध्ययन करते समय मैं इस अवधारणा को समझने में सक्षम नहीं था।जावा में जब कोई ऑब्जेक्ट पहुंच योग्य नहीं होता है?

कोई भी उदाहरण के साथ कोई विचार दे सकता है?

उत्तर

19

जब कोई संदर्भ संदर्भ नहीं है, या जब यह किसी द्वीप में अनाथ हो।

एक द्वीप एक ऑब्जेक्ट है जिसमें संदर्भ बिंदु है जो इंगित करता है, हालांकि उस ऑब्जेक्ट में कोई संदर्भ चर नहीं है।

class A { int i = 5; } 
class B { A a = new A(); } 
class C { 
    B b; 
    public static void main(String args[]) { 
     C c = new C(); 
     c.b = new B(); 
     // instance of A, B, and C created 
     c.b = null; 
     // instance of B and A eligible to be garbage collected. 
    } 

संपादित करें: बस का कहना है कि भले ही एक के कहने के लिए एक संदर्भ है, यह अब एक द्वीप पर है, क्योंकि बी के उदाहरण यह करने के लिए एक संदर्भ नहीं है चाहता हूँ। एक उदाहरण कचरा संग्रह के लिए योग्य है।

+1

बहुत अच्छा उदाहरण है, लेकिन परिवर्तनीय नामकरण थोड़ा उलझन में है। – Kiril

5

कोई ऑब्जेक्ट अप्राप्य है जब इसके संदर्भ में कोई संदर्भ नहीं है, या वे संदर्भ स्वयं पहुंचने योग्य वस्तुओं से हैं।

Integer i = new Integer(4); 
// the new Integer object is reachable via the reference in 'i' 
i = null; 
// the Integer object is no longer reachable. 
0

एक पहुंच योग्य वस्तु, एक ऐसी वस्तु है जिसमें इसका "पहुंचने योग्य" संदर्भ नहीं है। दूसरे शब्दों में, इसका कोई संदर्भ नहीं है।

4

ऑब्जेक्ट ग्राफ़ में जब कोई इससे जुड़ा नहीं है, तो संदर्भ पहुंच योग्य नहीं हो जाता है। तो फिर कचरा कलेक्टर इन खतरनाक अनाथ वस्तुओं के लिए स्कैन करता है और आवंटित स्मृति प्राप्त करने के लिए स्वाइप करता है।

java.lang.ref। {प्रेत, नरम, कमजोर} संदर्भ पहुंचने योग्य वस्तुओं को प्राप्त करता है। यदि फ़ाइनलाइज़र चलाया जाता है, तो जीसी पहले से ही इसकी पहुंच योग्य नहीं जानता है।

पढ़ के बारे में finalization- http://java.sun.com/developer/technicalArticles/javase/finalization/

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

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

अधिक अगर तुम http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html

की तरह (किसी भी धागे की) स्टैक पर

अस्थायी चर शामिल हैं

+0

"एक ऑब्जेक्ट एक पहुंचने योग्य स्थिति में प्रवेश करता है जब इसके लिए कोई और मजबूत संदर्भ मौजूद नहीं है": यह सही नहीं है। एक वस्तु के लिए इसका मजबूत संदर्भ हो सकता है, लेकिन रूट सेट से पहुंच योग्य नहीं है, और इसलिए कचरा इकट्ठा किया जाएगा। उदाहरण के लिए, एक संदर्भ बी, और बी संदर्भ ए, लेकिन दोनों रूट सेट से नहीं पहुंचा जा सकता है। – namanhams

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