如果只从垃圾引用它是一个对象垃圾?

sha*_*har 10 java garbage-collection

假设有一个A类的对象a,它保存对B类另一个对象b的引用.这是对b的唯一引用.所以现在,如果删除了对a的所有引用,那么就可以使用GC了.这是否意味着b也准备好收集垃圾?因为,虽然b有一个引用(在a内),但它是无法访问的,因为a是无法访问的.

那么这种情况究竟是如何运作的呢?我的意思是垃圾收集的顺序.

Dre*_*kes 13

一旦从根目录无法访问对象,就会收集该对象.有关GC根的解释,请参阅此问题.

将收集整个子图(如您所述),假设可能无法访问该子图中的任何节点.

Java(和.NET)使用标记和清除垃圾收集来处理这类问题.

std::shared_ptr<T>在无法访问的循环依赖项的情况下,基于引用计数的系统(例如C++ )可能会失败.这对Java/.NET GC来说不是问题.

  • 如果有一个downvoter无缘无故地投票,那么还有其他像我这样的人赞成一个好的答案:) (3认同)