Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 孤立对象的垃圾收集岛_Java_Garbage Collection - Fatal编程技术网

Java 孤立对象的垃圾收集岛

Java 孤立对象的垃圾收集岛,java,garbage-collection,Java,Garbage Collection,我不明白“孤岛”的意思 第9行运行后,有多少对象可用于垃圾收集? 起初我认为没有。但答案是两个。例如,x2.x和x3.x会发生什么?它们也是物体,不是吗?老实说,我不明白这个K&B问题。如果垃圾收集是基于规则的话 有人提到过我吗 然后x2指的是x3,x3指的是x2,所以两者都被引用,所以它们不会被垃圾收集 然而,垃圾收集规则比这更聪明。x2和x3是一个小“孤岛”,一旦我们离开声明它们的范围,就没有其他对象引用它们了。所以整个“岛”无法到达,所以整个岛被垃圾收集。在本例中,您总共创建了3个对象(第

我不明白“孤岛”的意思

第9行运行后,有多少对象可用于垃圾收集?
起初我认为没有。但答案是两个。例如,x2.x和x3.x会发生什么?它们也是物体,不是吗?老实说,我不明白这个K&B问题。

如果垃圾收集是基于规则的话

有人提到过我吗

然后x2指的是x3,x3指的是x2,所以两者都被引用,所以它们不会被垃圾收集


然而,垃圾收集规则比这更聪明。x2和x3是一个小“孤岛”,一旦我们离开声明它们的范围,就没有其他对象引用它们了。所以整个“岛”无法到达,所以整个岛被垃圾收集。

在本例中,您总共创建了3个对象(第4、5和8行)。我将分别称它们为o1、o2和o3。o1由x2引用,o2由x3引用。它们还包含相互引用(o1.x=x2.x引用o2,o2.x=x3.x引用o1)。当执行第8行时,o1不再被x2引用,但仍然被o2.x=x3.x引用。执行第9行时,x3不再引用o2,但o1.x仍然引用o2

此时,o1和o2仍然相互参照。但是,没有对这些对象的其他引用,因此无法使用它们。因此,它们有资格进行垃圾收集

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();  
    }  
}