垃圾收集行为与孤立的循环引用?

如果我在堆上有两个对象相互引用但它们没有链接到任何引用变量那么那些对象是否有资格进行垃圾回收?

对,他们是。 基本上,GC从“已知根”(静态变量,来自alll线程中所有堆栈帧的局部变量)走向查找无法进行垃圾回收的对象。 如果无法从根目录获取对象,则可以进行收集。

编辑:汤姆指出了这一点,我认为值得提升到答案本身:

从技术上讲,静态变量不是根 – 它们由类加载器引用的类引用,类加载器由对象引用的类引用,这些类由根引用引用。

差异可能在大多数时候都无关紧要,但知道:)这很好:)

看看这个: Java垃圾收集器如何处理自我引用 。

您可能想要检查java.lang.ref.WeakReference

像往常一样,Skeet在钱上。 我只想补充一点,你描述的情况是没有使用引用计数(使用早期C ++智能指针的标准策略)的原因。