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。
答案 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条件。