如果我在堆上有两个对象相互引用但它们没有链接到任何引用变量那么那些对象是否有资格进行垃圾回收?
对,他们是.基本上,GC从"已知根"(静态变量,来自alll线程中所有堆栈帧的局部变量)走向查找无法进行垃圾回收的对象.如果无法从根目录获取对象,则可以进行收集.
编辑:汤姆指出了这一点,我认为值得提升到答案本身:
从技术上讲,静态变量不是根 - 它们由类加载器引用的类引用,类加载器由对象引用的类引用,这些类由根引用引用.
差异可能在大多数时候都是无关紧要的,但是知道很好:)
看看这个:Java垃圾收集器如何处理自我引用.
你可能想检查一下 java.lang.ref.WeakReference