【发布时间】:2013-01-11 13:03:13
【问题描述】:
我对 Java 中垃圾收集的工作原理有点困惑。
当不再有对它的活动引用时,我知道一个对象有资格进行垃圾回收,但如果它有对活动对象的引用怎么办?
假设我有一个再次引用更多节点的节点集合
List
1 -> Node a -> Node b
2 -> Node c -> Node d
3 -> Node d -> Node c
4 -> Node e
5
现在如果我删除列表,节点 c d 和 e 应该被垃圾收集。节点 e 不再引用它,节点 c 和 d 有循环引用。
但是节点 a 呢?会被垃圾回收吗?
节点 b 是否有外部实时引用会有所不同吗?假设如果节点 b 从不同的地方引用它,那会让节点 a 留在内存中吗?
【问题讨论】:
-
可以收集任何没有来自线程根的 strong 引用的对象。这意味着两个对象可以相互引用但将被收集。您可以对对象进行弱引用,但仍可以对其进行清理。
标签: java garbage-collection jvm