方法和垃圾收集
答
嗯,这取决于 - 只要没有更多的“实时”引用,就有资格进行垃圾回收。如果你在方法中做了某些事情,这意味着方法结束后仍然有活动引用,那么不行 - 该对象将不符合垃圾回收的条件。例如:
public class Test
{
private Object field;
public void foo()
{
field = new Object();
}
public Object getField()
{
return field:
}
}
// Elsewhere
Test t = new Test();
t.foo();
Object x = t.getField();
在foo()
创建的对象肯定是不符合垃圾收集时foo()
已经完成 - 毕竟,我们希望它的下一行代码获取!
答
假设对该对象的引用没有交给其他方法,当方法退出时仍然在范围内,那么是的。
答
当没有对象的引用或者引用它的每个对象也被垃圾收集时,对象可以被垃圾收集。
public int getThing() {
Object o = new Object();
return 5;
}
这里,Ø可以是方法后收集垃圾,因为没有指向它。
Object o = null;
public int getThing() {
o = new Object();
return 5;
}
这不能,因为其他的事情还是可以参考Ø因为它是一个类成员。
public Object getThing() {
Object o = new Object();
return o;
}
这里不能,因为它被返回。如果呼叫者坚持,它仍然活着。
如果有人有指向它的指针,它会保持活动状态(大致)。
答
我想添加到上面的答案唯一的事情是,只要有一个强从一个不符合条件的对象内引用它,对象不符合垃圾回收的条件。
有一些弱引用(和其他一些类型的东西)使对象指向可收集对象,即使引用本身仍然存在。你可以看到WeakHashMap和相关的更多信息。
答案取决于比你的问题中陈述的更多的东西。面试官可能正在等待你询问相关问题 - 他们想知道你对垃圾收集有多少了解,这可以根据你问他们的回答来确定。 – 2009-11-02 21:23:53
是的,只要它没有被“根路径”引用,即它没有被另一个不可终结的对象引用。 – rsp 2009-11-02 21:38:06