java - 如果仅从垃圾中引用一个对象,它就是垃圾吗?

标签 java garbage-collection

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

那么这个场景究竟是如何运作的呢?我的意思是垃圾收集的顺序。

最佳答案

一旦对象无法从根访问,它将被收集。参见 this question了解 GC 根的解释。

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

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

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

关于java - 如果仅从垃圾中引用一个对象,它就是垃圾吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505261/

相关文章:

python - Python 中有 Dispose 模式吗?

java - Java中的突发内存使用

java - Android中如何监听GC事件

java - 模拟Java中的内存使用

java - 为什么对象类不采用 null

java - 具有寻路算法的迷宫

java - 安装 java get_asdf_config_value : command not found 时出现 ASDF 错误

Java - 合并排序数组

java - 关于 DataOutputStream 的困惑

javascript - JQuery - 检测 self /垃圾收集上的 DOMNodeRemoved