在下面的代码中,考虑到amethod
已被调用。最初引用的对象在什么点/线上myObject
,有资格进行垃圾收集吗?
class Test {
private Object classObject;
public void amethod() {
Object myObject = new Object();
classObject = myObject;
myObject = null;
}
}
And if classObject
or amethod
具有 public、protected、default 或 static 的访问修饰符,它会影响对象有资格进行垃圾收集的程度吗?如果是的话,会受到怎样的影响?
- 我的第一个想法是,当测试对象符合垃圾收集条件时,该对象就有资格进行垃圾收集。
- 但话又说回来。优化器可能知道在这种情况下永远不会读取 classObject
classObject = myObject;
将被优化掉并且myObject = null;
是它有资格进行垃圾收集的点。
该对象不会成为垃圾收集的候选对象,直到all对它的引用将被丢弃。 Java 对象是通过引用分配的,所以当你有
classObject = myObject;
您为堆上的同一对象分配了另一个引用。所以这一行
myObject = null;
只删除一个引用。使myObject
作为垃圾收集的候选者,你必须有
classObject = null;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)