java链表中删除的节点会发生什么?

时间:2014-01-18 22:59:12

标签: java garbage-collection linked-list

我想知道垃圾收集器何时从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--;
}

1 个答案:

答案 0 :(得分:1)

垃圾收集器会定期检查无法访问的对象,例如此处删除的节点(假设没有其他引用。)

正是在这种情况下,这会受到很多条件的影响,因为有多个垃圾收集器实现使用不同的时序策略。一般来说,你无法预测何时。

如果您需要急切地在删除时释放一些资源(例如,您的链接列表节点可能有相关的文件描述符),那么最好在删除最后一个引用之前自行完成。

如果您需要监视垃圾收集器处理节点的时间,您应该查看java.lang.ref包中可用的类,尤其是ReferenceQueue类。