垃圾收集哪个对象(SCJP Book Q)

时间:2014-12-04 10:28:58

标签: java garbage-collection

class Beta{}
class Alpha{
    static Beta b1;
    Beta b2;
}
public class Tester{
    public static void main(String a[]) {
        Beta b1 = new Beta();
        Beta b2 = new Beta();
        Alpha a1 = new Alpha();
        Alpha a2 = new Alpha();
        a1.b1 = b1;
        a1.b2 = b1;
        a2.b2 = b2;
        a1 = null;
        b1 = null;
        b2 = null;
        //line 16
    }
}

所以在第16行,有多少obj将有资格获得GC, 我认为没有一个对象应该是GC,因为a2仍然有ref,而a1引用的obj仍然引用了beta obj。

但答案是一个obj准备好Gc可以解释这个

1 个答案:

答案 0 :(得分:2)

让我们调用堆Beta上的两个Beta1对象。 Beta2和两个Alpha个对象Alpha1Alpha2

在第16行,您有以下情况:

enter image description here

如您所见,Alpha2是可以访问的,通过该引用Beta1Beta2仍然可以访问。因此,只有Alpha1符合GC条件。