6

如果对象 a 和 b 只有相互引用,GC 会收集它们吗?您能否帮助解释原因或提供参考文档来解释该逻辑。非常感谢

4

2 回答 2

6

是的,如果不存在对 GC 的更强有力的引用,他们将成为 GC 的候选者。

重要的是要注意,不仅仅是任何强引用都会在内存中保存一个对象。这些必须是从垃圾收集根链接的引用。GC 根是一类特殊的变量,包括:

  • 堆栈上的临时变量(任何线程的)
  • 静态变量(来自任何类)
  • 来自 JNI 原生代码的特殊引用

请参阅此文档(§ A.3.4 Unreachable 和 §A.4.2 Example GC with WeakReference)

于 2012-06-02T09:50:18.890 回答
4

如果对象 a 和 b 相互引用并且不干扰其他对象,则它们形成一个孤立的对象岛。这种组也被垃圾收集器收集。看看这个线程。

于 2012-06-02T09:47:21.447 回答