JAVA:了解有多少符合GC条件的对象

时间:2012-05-23 18:39:26

标签: java garbage-collection

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..

    }
}

问:许多对象如何符合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。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-2)

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