我不明白“孤立物体群岛”的含义
class X2{
public X2 x;
public static void main(String... args){
X2 x2 = new X2();
X2 x3 = new X2();
x2.x = x3;
x3.x = x2;
x2 = new X2();
x3 = x2;
doComplexStuff();
}
}
第9行运行后,有多少对象可以用于垃圾回收? 起初我没想到。但答案是两个。例如x2.x和x3.x会发生什么?它们也是物体,不是吗?说实话,我不明白这个K& B问题。
答案 0 :(得分:4)
在示例中,您将创建总共3个对象(在第4,5和8行)。我将分别称它们为o1,o2和o3。 o1由x2引用,o2由x3引用。它们还包含对彼此的引用(o1.x = x2.x引用o2,o2.x = x3.x引用o1)。当执行第8行时,x2不再引用o1,但仍然由o2.x = x3.x引用。当执行第9行时,o3不再被x3引用,但仍由o1.x引用。
此时o1和o2仍然相互引用。但是没有其他对这些对象的引用,因此无法使用它们。因此,它们有资格进行垃圾收集。
答案 1 :(得分:2)
如果垃圾收集基于规则
有没有人提到我?
然后x2指的是x3而x3指的是x2,所以两者都被引用,所以它们不会被垃圾收集。
然而,垃圾收集规则比这更明确。 x2和x3是一个小“岛”,一旦我们离开声明它们的范围,其他任何对象都没有引用它们。所以整个“岛”都无法到达,所以全岛都是垃圾收集。