gpt4 book ai didi

java - Java垃圾收集器如何在这里工作?

转载 作者:行者123 更新时间:2023-11-30 08:20:10 25 4
gpt4 key购买 nike

在此query remove() 方法有以下实现。

 /**
* remove() removes "node" from this DList. If "node" is null, do nothing.
* Performance: runs in O(1) time.
*/
public void remove(DListNode node) {
if((node != null) && (node.listp == this)){
node.prev.next = node.next;
node.next.prev = node.prev;
}
this.size--;
}

执行此 remove() 方法后,将不会有任何指向对象的内部指针,除非 DList 类的用户仍然使用某个引用变量指向此节点。

我的问题:

在没有引用指针指向该对象后,垃圾收集器何时以及如何丢弃该对象?因为 GC 如何在不引用该对象的情况下控制该对象?

最佳答案

一个对象可能在它是no longer strongly reachable之后的任何点被GC'ed/回收.当且仅当可以从 GC 根访问(通过强引用)一个对象时,该对象是强可达的。即回收对象的 GC - if and when it chooses to do so - 仅仅是无法访问所述对象的结果。

现在,Java 保证的一件事是 it will try it's best (这可能涉及什么都不做)在抛出 OOM 之前释放内存。

即使代码中没有强引用,也不意味着 JVM 没有跟踪对象或者它已经消失了!该对象仍然存在 - 即使它从用户代码中是强可达的(阅读:不可访问) - 直到/当它实际上被 GC 时。

这允许一些有趣的案例,例如。

关于java - Java垃圾收集器如何在这里工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26222180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com