符合垃圾收集条件的对象数量

时间:2012-11-13 21:51:06

标签: java garbage-collection

我不确定我是否完全了解垃圾收集器的行为,因此我基于previous question提出了这个问题。

在这个程序中:

class A {
    Boolean b;
    A easyMethod(A a){
       return new A();
    }
    public static void main(String [] args){
        A a1 = new A();
        A a2 = new A();
        A a3 = new A();
        a3 = a1.easyMethod(a2);
        a1 = null;
        // Some other code 
    }
} 

有多少对象可以进行垃圾回收?我认为虽然a3永远不会变为null,但是分配给它的第一个对象(new A())也应该被垃圾收集,因为没有引用仍然指向它。我对吗?我认为正确的答案将是2个对象。实际上是什么?

2 个答案:

答案 0 :(得分:2)

  

我认为虽然a3永远不会变为空,但分配给它的第一个对象(new A())也应该被垃圾收集,因为没有引用仍然指向它。我对吗?我认为正确的答案将是2个对象。

是的,这是完全正确的。 a3最初指向A的一个实例,但在重新分配该变量以指向不同的实例之后,不再有任何方式可以到达原始实例,因此所述原始实例符合垃圾的条件集合。

答案 1 :(得分:2)

是的,你是对的。

a1 = <instance 1>
a2 = <instance 2>
a3 = <instance 3>
a3 = <instance 4> //as a returned value
a1 = null

因此不再引用instance 1instance 3,因此可能会被收集。