【发布时间】:2012-10-30 17:54:15
【问题描述】:
在下面的代码中,假设 amethod 已被调用。 myObject 最初引用的对象在哪一点/哪一行符合垃圾回收条件?
class Test {
private Object classObject;
public void amethod() {
Object myObject = new Object();
classObject = myObject;
myObject = null;
}
}
如果classObject 或amethod 具有public、protected、default 或static 的访问修饰符,它会影响对象符合垃圾收集条件的点吗?如果有,会受到怎样的影响?
- 我的第一个想法是,当 Test 对象符合垃圾回收条件时,该对象符合垃圾回收条件。
- 但话又说回来了。优化器可能知道永远不会读取 classObject,在这种情况下,
classObject = myObject;将被优化,myObject = null;是它有资格进行垃圾收集的点。
【问题讨论】:
-
当你说“对象”时,你指的是
Test类实例,Object classObject还是Object myObject? -
@LuiggiMendoza "the Object" 总是指 myObject 最初引用的 Object。