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

标签 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--;
}

最佳答案

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

确切地说,当它这样做时,会受到很多条件的影响,因为有多个垃圾收集器实现使用不同的计时策略。一般来说,您无法预测何时。

如果您需要在删除时立即释放某些资源(例如,您的链表节点可能有关联的文件描述符),您最好在删除最后一个引用之前自己执行此操作。

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

关于java - java链表中被删除的节点会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21210978/

相关文章:

java - 在开发模式下生成 JasperReport 时出错

java - java中的"object = this"

c++ - 链接目标文件时链接器命令失败,退出代码为 1

无法解决无限循环

python - 如何从内存中删除流?

javascript - Java 中的 List<String> 到 JavaScript 中的 List

java - 为什么用空值实例化变量

Java DB 如何将外键值插入表列

javascript - JS 垃圾回收

java - 将创建多少对象以及有多少对象可用于垃圾回收?