首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java垃圾收集和空引用

java垃圾收集和空引用
EN

Stack Overflow用户
提问于 2012-10-28 22:35:20
回答 6查看 840关注 0票数 2

在我学习OCJP的过程中,我遇到了以下问题:

代码语言:javascript
复制
class CardBoard {
           Short story = 200;
           CardBoard go(CardBoard cb) {
                cb = null;
                return cb;
           }
           public static void main(String[] args) {
             CardBoard c1 = new CardBoard();
             CardBoard c2 = new CardBoard();
             CardBoard c3 = c1.go(c2);
             c1 = null;
            // do Stuff 
}}

当达到//doStuff时,有多少对象符合GC条件?

正确答案是2,即c1及其story对象。

当到达//doStuff行时,c3也为null。为什么它不符合GC的条件?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-28 22:38:21

c3是一个具有空引用的本地句柄,它不指向(并且hever已经指向)已分配的对象。因此,GC不存在任何问题。

票数 5
EN

Stack Overflow用户

发布于 2012-10-28 22:38:19

c3不是对象。它是一个引用null的变量。变量不能符合GC的条件。只有对象才有资格进行GC。

票数 1
EN

Stack Overflow用户

发布于 2012-10-28 22:43:04

垃圾收集器扫描内存中的对象,当它找到一个对象时,检查指向它的句柄(反之亦然),当调用垃圾收集器时,没有指向它们的句柄的对象(在内存中)将从内存中删除。在这种情况下,代码中只有2个对象在内存中创建,但有3个句柄。垃圾回收器最多只能删除2个对象(因为只存在两个对象) C3仅指向空位置。不会删除C1、C2和C3。它们用来指向的对象将被移除(以防没有其他句柄点指向它们)。因此,在这一点上,由于C3从未指向内存中的对象,因此将其设置为null对垃圾收集器没有影响。

希望我能帮上忙

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

https://stackoverflow.com/questions/13109717

复制
相关文章

相似问题

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