-3

SCJP第三章有个问题……看下面代码……

class Beta{

}

class Alpha extends  Beta{
    static Beta b1;
    Beta b2;
}

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;

        //DO STUFF
        //HOW MANY OBJECTS ARE ELIGIBE FOR GC AT THIS LINE..

    }
}

Q : 有多少对象符合 GC @ line //DO STUFF

选项 :

Option-1> 0
Option-2> 1
Option-3> 2
Option-4> 3
Option-5> 4
Option-6> 5

书上说:正确的断言是 2:只有一个对象符合 GC 条件。

仍然无法理解这个答案。如何只有一个对象有资格进行 GC?

任何想法 ??谢谢,Gunjan。

4

2 回答 2

1

可能因为a2.b1仍然包含对的引用,b1因为它是静态的。它也有a1.b2引用b2。所以 b1、b2 和 a2 非常活跃。只有a1有资格进行垃圾收集。

于 2012-05-23T22:46:05.737 回答
-2

这里 ...a1.b1 或 a2.b1 是静态的。所以它不能被GCed。但是 a1 有资格进行 GC,因为它没有被使用。a2.b1 指向 b1。所以 b1 不能被 GCed。我们正在清空 b2,因此它也可以添加到 GC 管道中。所以只有两个对象 a1 和 b2 符合 GC 条件。

于 2012-05-31T10:36:10.600 回答