我对Java中的垃圾回收如何工作感到有些困惑。
我得到一个对象,当它不再有实时引用时,就可以进行垃圾回收,但是如果它引用了实时对象又该怎么办?
可以说我有一个节点集合,再次引用了更多节点
List 1 -> Node a -> Node b 2 -> Node c -> Node d 3 -> Node d -> Node c 4 -> Node e 5
现在,如果我删除列表,则应该对节点cd和e进行垃圾回收。节点e没有更多引用,而节点c和d具有循环引用。
但是节点a呢?会被垃圾收集吗?
节点b是否具有外部实时引用会有所不同吗?假设节点b从另一个地方引用了它,那会使节点成为内存吗?
有一组根引用(当前局部变量,静态引用,堆栈帧的操作数堆栈)被认为是活动的。从此根引用根目录无法访问的所有内容都可以进行垃圾回收。
节点a没有指向它的引用。因此,即使它指向活动对象,也符合gc的资格。由于节点b具有实时引用,因此不会得到gc’ed。