2010-01-12 18 views
5

Przejrzałem to pytanie na stronie przygotowania SCJP. Jak odpowiedź A jest prawidłowa?kolekcja java java

Co jest prawdą w przypadku obiektów przywoływanych przez a, b, aa w wierszu oznaczonym "// jakiś kod przechodzi tutaj "?

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. 

Odpowiedź:

Odpowiedz

8

Java nie korzysta tylko prostą odniesienia liczenia garbage collector.

Gdy JVM wykonuje pełny przebieg GC, przechodzi przez cały wykres obiektu, zaznaczając każdy znaleziony przedmiot. Wszelkie elementy, które nie są oznaczone, kwalifikują się do czyszczenia.

Ponieważ ani a, ani b nie są już dostępne z Twojego głównego kodu, nie będą one oznaczone i dlatego mogą zostać oczyszczone.

2

cóż, aby coś nie było zbiorem śmieci, nie można go dosięgnąć z dowolnego miejsca na stosie. Biorąc pod uwagę, że stos w tym miejscu ma tylko wartość pustą dla aa i pojedynczej tablicy łańcuchów (args), nie ma sposobu na uzyskanie a lub b.

Powiązane problemy