2010-01-12 15 views
5

मैं इस प्रश्न के माध्यम से एक एससीजेपी तैयारी साइट पर जा रहा था। उत्तर ए सही कैसे है?जावा कचरा संग्रह

"// कुछ कोड " लेबल वाली रेखा पर ए, बी, एए द्वारा संदर्भित वस्तुओं के बारे में क्या सच है?

class A { 
    private B b; 
    public A() { 
     this.b = new B(this); 
    } 
} 

class B { 
    private A a; 
    public B(A a) { 
     this.a = a; 
    } 
} 

public class Test { 
    public static void main(String args[]) { 
     A aa = new A(); 
     aa = null; 
     // some code goes here 
    } 
} 


A) The objects referenced by a and b are eligible for garbage collection. 
B) None of these objects are eligible for garbage collection. 
C) Only the object referenced by "a" is eligible for garbage collection. 
D) Only the object referenced by "b" is eligible for garbage collection. 
E) Only the object referenced by "aa" is eligible for garbage collection. 

उत्तर: A

उत्तर

8

जावा केवल एक साधारण संदर्भ गिनती कचरा कलेक्टर का उपयोग नहीं करता।

जब JVM एक पूर्ण जीसी रन करता है, तो यह पूरे ऑब्जेक्ट ग्राफ़ को चलाता है, जो प्रत्येक आइटम को चिह्नित करता है। चिह्नित कोई भी आइटम क्लीनअप के लिए योग्य नहीं है।

चूंकि a और न ही b अब आपके मुख्य कोड से पहुंच योग्य हैं, उन्हें चिह्नित नहीं किया जाएगा और इस प्रकार सफाई के लिए पात्र हैं।

2

अच्छी तरह से, कुछ कचरा इकट्ठा करने योग्य नहीं होने के लिए, इसे ढेर पर कहीं से भी पहुंचना असंभव होना चाहिए। इस बात पर विचार करते हुए कि उस बिंदु पर ढेर के पास केवल ए के लिए शून्य मान है और एक स्ट्रिंग सरणी (तर्क) कोई या बी प्राप्त करने का कोई तरीका नहीं है।

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