我正在准备OCJP考试。我在做模拟测试。这是一个代码片段。
public class GC {
private Object o;
private void doSomethingElse(Object obj) {
o = obj;
}
public void doSomething() {
Object obj = new Object(); // Line 5
doSomethingElse(obj); // Line 6
obj = new Object(); // Line 7
doSomethingElse(null); // Line 8
obj = null; // Line 9
}
}当调用doSomething方法时,对象obj在哪一行之后可以用于垃圾收集?
我知道答案是第9行,但是根据考试模拟器是第8行吗?我不知道谁是对的?
发布于 2015-03-26 15:19:08
模拟器是对的。在第7行中,您重写了对实例的本地硬引用,因此第9行中的代码使第二个Object符合GC条件。第一个符合第8行的条件。
较长的解释:
第5行:创建inst1并分配给obj
第6行:将inst1放入this.o。现在有两种对inst1的硬引用
第7行:创建inst2并分配给obj。this.o仍然指向inst1
第8行:清除引用this.o,使inst1可用于GC
第9行:清除引用obj,使inst2可用于GC
发布于 2015-03-26 15:28:46
在第5行中创建的对象可以在第8行之后进行垃圾收集,在7中创建的对象可以在第9行中进行垃圾收集。
https://stackoverflow.com/questions/29282224
复制相似问题