сборка "мусора" Java

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

Что верно об объектах, на которые ссылается a, b, aa в строке маркировал "//some code goes here"?

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

5
задан Edmund 12 January 2010 в 02:03
поделиться

2 ответа

Ну для чего-то не быть мусором коллекционируемыми, его должно быть невозможно достичь его из любого места на стеке. Учитывая, что стек в этой точке имеет только нулевое значение для AA и единого массива строки (ARGS), нет способа добраться до или б.

2
ответ дан 13 December 2019 в 22:08
поделиться

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

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

Так как ни ни , ни B больше не достигаются от вашего основного кода, они не будут помечены и, таким образом, имеют право на очистку.

8
ответ дан 13 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: