Java中的垃圾收集如何工作?

Jor*_*ust 11 java garbage-collection

我想知道Java中的垃圾收集器如何处理以下情况.

对象A具有对象B的引用,而对象B具有对对象C的引用.主程序具有对对象A的引用.因此,您可以通过对象A使用对象B,通过对象A通过对象B使用对象C.

如果对象A和对象B之间的链接设置为null,对象B和对象C会发生什么?

现在垃圾收集器是否收集了对象B和对象C?我的意思是对象B和对象C之间仍然存在连接.

bru*_*nde 9

现在垃圾收集器是否收集了对象B和对象C?

是.好吧,它们是收集的候选者,因为没有办法通过A的根达到对象B和C.


Joa*_*uer 6

是的,B和C有资格进行垃圾收集,如果它们无法从任何GC根目录到达(GC根目录通常是所有线程和堆栈上的所有引用).

  • @Maurice:据我所知,不是直接的.静态变量可以通过它们所属的`Class`来访问,可以通过加载它们的`ClassLoader`来访问它们,可以通过它加载的其他类来访问它们,这些类可以通过该类型的对象访问.因此,如果`ClassLoader`是GCed,你甚至可以丢失静态变量的值. (3认同)