【发布时间】:2012-11-13 21:51:05
【问题描述】:
我不确定我是否完全理解垃圾收集器的行为,因此我根据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 个对象。什么是真的?
【问题讨论】:
-
不要将您的问题建立在另一个问题上,这不是一个讨论线程。在此处发布完整的相关代码。
-
编译器很可能会丢弃它发现的任何变量和赋值,在它们的潜在生命周期内永远不会再被读取。因此,分配给代码中变量的对象不会在运行时自动引用或“可访问”,这意味着该对象可能在其构造函数执行后立即符合收集条件。