[英]JAVA : To know how many objects eligible for GC
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。
可能是因为a2.b1
仍然会包含对b1
的引用,因为它是静态的。 它还有a1.b2
引用b2
。 所以 b1、b2 和 a2 非常活跃。 只有a1
有资格进行垃圾收集。
这里 ...a1.b1 或 a2.b1 是静态的。 所以它不能被GCed。 但是 a1 有资格进行 GC,因为它没有被使用。 而 a2.b1 指向 b1。 所以 b1 不能被 GCed。 我们正在清零 b2,因此它也可以添加到 GC 管道中。 所以只有两个对象 a1 和 b2 有资格进行 GC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.