2010-01-12 4 views
5

Я проходил этот вопрос на сайте подготовки SCJP. Как правильно ответить A?сбор мусора java

Что касается объектов, на которые ссылаются a, b, aa на строке с надписью «// некоторый код идет здесь»?

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. 

Ответ:

ответ

8

Java не только использовать простой ссылки подсчета сборщика мусора.

Когда JVM выполняет полный запуск GC, он просматривает весь график объекта, отмечая каждый найденный элемент. Любые предметы, которые не отмечены, имеют право на очистку.

Поскольку ни a, ни b больше не доступны для вашего основного кода, они не будут маркированы и, следовательно, могут быть очищены.

2

Хорошо, что-то, чтобы не быть собираемым мусором, его невозможно достичь из любой точки стека. Учитывая, что стек в этой точке имеет только нулевое значение для aa и один массив строк (args), нет никакого способа добраться до a или b.

Смежные вопросы