【发布时间】:2021-01-10 23:47:52
【问题描述】:
假设这个自定义的单链表有以下数据;
1 2 3
我想删除第一个元素(恰好是 1)。为此,我只是将第一个指针移动到下一个,就像这样 ->
first = first.next;
现在,没有任何东西指向包含“1”的节点,而是指向某个节点(在本例中,是一个包含值“2”的节点)。
我从列表中删除的包含“1”的节点是否会被垃圾回收?
这是完整的实现:
public class LinkedList<E> {
private Node<E> first;
private Node<E> last;
public E removeFromFront() {
if(isEmpty()) {
System.out.println("List is empty");
return null;
}
E data = first.data;
if(first == last) {
first = last = null;
} else {
first = first.next;
}
return data;
}
【问题讨论】:
-
该对象将有资格进行垃圾回收,因为堆栈或堆上没有对象对其进行引用。一般来说,Reachable 对象不会被垃圾回收(例外是使用弱泄漏的缓存类)
-
为什么不应该被垃圾回收?
-
垃圾收集实际上会删除未保存的所有内容。如果有对某事的引用,它就会被保存。否则,它会被删除。
-
嗯,是的 - 没有指向它的实时引用的所有内容都被视为垃圾。
标签: java linked-list garbage-collection