我想知道垃圾收集器何时从LinkedList释放与已删除节点关联的内存!
我的意思是GC只是因为没有对该对象的引用而释放内存? (请参阅下面的代码)
public class Node {
int data;
Node next;
public Node(int data){
this.data = data;
}
public Node(Node node){
data = node.data;
next = node.next;
}
}
public void delete (Node prevNode, Node currentNode){
if (currentNode == tail){
tail = prevNode;
}
if (currentNode == head){
head = currentNode.next;
} else {
prevNode.next = currentNode.next;
}
len--;
}
答案 0 :(得分:1)
垃圾收集器会定期检查无法访问的对象,例如此处删除的节点(假设没有其他引用。)
正是在这种情况下,这会受到很多条件的影响,因为有多个垃圾收集器实现使用不同的时序策略。一般来说,你无法预测何时。
如果您需要急切地在删除时释放一些资源(例如,您的链接列表节点可能有相关的文件描述符),那么最好在删除最后一个引用之前自行完成。
如果您需要监视垃圾收集器处理节点的时间,您应该查看java.lang.ref
包中可用的类,尤其是ReferenceQueue类。