方法和垃圾收集

cc.*_*cc. 0 java garbage-collection

我在采访中遇到了这个问题:

方法完成后,在方法内创建的对象是否符合垃圾回收的条件?

是的正确答案是肯定的吗?

MBC*_*ook 9

当没有对象的引用时,对象可以被垃圾收集,或者引用它的每个对象也被垃圾收集.

public int getThing() {
     Object o = new Object();
     return 5;
}
Run Code Online (Sandbox Code Playgroud)

在这里,o可以在方法之后进行垃圾收集,因为没有任何指向它的方法.

Object o = null;

public int getThing() {
     o = new Object();
     return 5;
}
Run Code Online (Sandbox Code Playgroud)

在这里它不能,因为其他东西仍然可以引用o,因为它是一个类成员.

public Object getThing() {
     Object o = new Object();
     return o;
}
Run Code Online (Sandbox Code Playgroud)

这里不可能,因为它被退回了.如果呼叫者持有它,它会保持活着状态.

如果有人指向它,它会保持活着(粗略).