执行最后3行后有多少个对象存活?

时间:2016-09-18 11:45:49

标签: java object garbage-collection

我刚刚开始学习Java并且不了解这个问题。在下面的代码中,执行最后3行后有多少个对象会活着?

public class Demo {
    Demo obj;

    void show() {
        System.out.println("Hello this is show method.");
    }

    public static void main(String args[]) {
        Demo obj1 = new Demo();
        Demo obj2 = new Demo();
        Demo obj3 = new Demo();
        Demo obj4 = new Demo();
        obj1.obj = obj2;
        obj2.obj = obj3;
        obj3.obj = obj4;
        obj4.obj = obj1;

        obj1 = null;
        obj2 = null;
        obj3 = null;
    }
}

1 个答案:

答案 0 :(得分:0)

如果通过" alive"你的意思是"没有资格进行垃圾收集",所有4个对象将是" alive"在最后一行执行之后。

obj4仍会包含对最后创建的Demo实例(Demo obj4 = new Demo())的引用。该实例将保留对第一个Demo实例的引用(由于obj4.obj = obj1;),该实例将保留对第二个Demo实例的引用(由于obj1.obj = obj2;),将保留对第3个Demo实例的引用(由于obj2.obj = obj3;)。

因此,所有4个对象仍然具有引用,并且在执行最后3个语句后不能进行垃圾回收。