gpt4 book ai didi

java - 任何未使用的对象都可以从垃圾收集器中逃脱吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:59:45 27 4
gpt4 key购买 nike

是否有可能某个对象未在任何地方被引用但仍存在于堆中。我的意思是,是否有可能未使用的对象从垃圾收集器中逃脱并一直存在于堆中,直到应用程序结束。

想知道,因为如果它存在,那么在编码时我可以更加谨慎。

最佳答案

如果一个对象不再被引用,它仍然存在于堆中,但它也可以自由地被垃圾收集(除非我们谈论的是类对象,它存在于 PermGen 空间中并且永远不会被垃圾收集 - 但是这通常不是您需要担心的事情)。

无法保证会在多长时间内完成,但在回收这些对象的内存之前,您的应用程序不会耗尽内存。

但是,垃圾收集确实涉及开销,因此如果您创建的对象比您需要的多并且可以轻松创建更少的对象,那么一定要这样做。

编辑:针对您的评论,如果一个对象确实没有被任何东西引用,它将在垃圾收集期间被回收(假设您使用的是 Sun 的最新 JVM;我不能对其他实现说话)。原因如下:所有对象都在堆上连续分配。当 GC 发生时,JVM 会跟踪所有对它知道可访问的“标记”对象的引用——然后将这些对象移动到另一个干净的区域。旧区域然后被认为是空闲内存。无法移动无法通过引用找到的任何内容。重点是 GC 不需要“查找”未引用的对象。如果有的话,我会更担心对象在不应该被引用时仍然被引用,这会导致内存泄漏。

关于java - 任何未使用的对象都可以从垃圾收集器中逃脱吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135089/

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