gpt4 book ai didi

java - 为什么包装对象适合垃圾回收?

转载 作者:行者123 更新时间:2023-12-01 18:39:06 25 4
gpt4 key购买 nike

此问题摘自 SCJP。我们需要找到符合垃圾收集条件的对象。答案是c3和短篇小说。我需要知道为什么它的短篇小说符合 GC 资格。这实际上是一个实例变量。这是否意味着,如果我不使用实例变量,它们就有资格进行垃圾收集?

每本书的实际答案是:只有一个 CardBoard 对象 (c1) 符合条件,但它有一个关联的 Short 包装器对象也符合条件。因此“两个”对象符合条件。

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
}
}

最佳答案

这一切都取决于垃圾收集器认为“可达”的内容。基本上,它从所谓的垃圾收集根开始(执行线程中的局部变量是此类根的一个示例),并遵循对其他对象的所有引用。在通过遍历所有这些引用来访问它可以到达的所有对象之后,剩下一些不再可到达的对象,这意味着无论您如何努力,您都不会再使用这些对象,因此可以安全地丢弃它们(或作为垃圾收集)。

尽管 c1 引用其 story 对象,但无法访问其中任何一个,因此它们都符合条件。

c3 从不引用对象,该示例旨在混淆,但 go() 始终返回空引用,并且不会为 创建对象实例c3,并且它也没有卡在 c1c2 引用的任何一个对象上(尽管后者与本例无关,因为它仍然被c2 变量)。

关于java - 为什么包装对象适合垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com