首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java垃圾回收资格

Java垃圾回收资格
EN

Stack Overflow用户
提问于 2015-03-26 15:16:28
回答 2查看 77关注 0票数 1

我正在准备OCJP考试。我在做模拟测试。这是一个代码片段。

代码语言:javascript
复制
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行吗?我不知道谁是对的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-26 15:19:08

模拟器是对的。在第7行中,您重写了对实例的本地硬引用,因此第9行中的代码使第二个Object符合GC条件。第一个符合第8行的条件。

较长的解释:

第5行:创建inst1并分配给obj

第6行:将inst1放入this.o。现在有两种对inst1的硬引用

第7行:创建inst2并分配给objthis.o仍然指向inst1

第8行:清除引用this.o,使inst1可用于GC

第9行:清除引用obj,使inst2可用于GC

票数 6
EN

Stack Overflow用户

发布于 2015-03-26 15:28:46

在第5行中创建的对象可以在第8行之后进行垃圾收集,在7中创建的对象可以在第9行中进行垃圾收集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29282224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档