我对 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 保留在内存中吗?
有一个引用的根集(当前局部变量、静态引用、堆栈帧的操作数堆栈),被认为是活动的。从此根引用集中无法访问的任何内容都符合垃圾回收的条件。
节点 a 没有任何指向它的引用。因此,即使它引用的是活动对象,它也有资格进行 gc。由于节点 b 具有实时引用,因此它不会被垃圾回收。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)