【发布时间】:2016-05-08 21:11:00
【问题描述】:
我目前正在为 CS 考试而学习,我想到了以下问题:如果我有一个包含两个字段(一个前卫和后卫)的双向链表,并且我想清除列表(使它是空的)。将尾部节点设置为我的头部之后的next-元素是否就足够了,反之亦然(尾部的previous-node 是头部)。垃圾回收是否会删除这两者之间的元素(元素相互引用,但外部不存在对这个“块”节点的引用?
为了更清楚一点:如果我有这个:|HEAD| <--> |node_01| <--> | . . .| <--> |node_n| <--> |TAIL|
我把头尾的next/previous节点改成这样:|HEAD| <--> |Tail|
Java 会删除node_01 - node_n(注意单个箭头):|HEAD| <-- |node_01| <--> | . . . | <--> |node_n| --> |TAIL|
它们都相互引用,但不存在来自外部的引用 - 因此我无法联系到它们。还是这是内存泄漏?
【问题讨论】:
-
如果真的没有对这些悬空节点的引用,那么我希望垃圾收集器会在下一次计划收集时删除它们。
标签: java memory-management memory-leaks garbage-collection doubly-linked-list