gpt4 book ai didi

java - 有多少对象适合垃圾收集器?

转载 作者:行者123 更新时间:2023-11-30 04:36:35 25 4
gpt4 key购买 nike

当 Tester 类的 main 方法到达末尾时,有多少对象符合垃圾回收条件?我的印象是答案是两个,特别是a1、b1。然而我在某个地方找到了正确的答案,只有 a1 对象才符合条件。我认为,由于我们没有将 b1 指定为 a2 中的成员变量,因此在 main 结束之前将 b1 指定为 null,因此应该由垃圾收集器收集它。什么是真实的?

class B {
}

class A {
static B b1;
B b2;
}

public class Tester {
public static void main(String[] args) {
B b1 = new B();
B b2 = new B();
A a1 = new A();
A a2 = new A();
a1.b1 = b1;
a1.b2 = b1;
a2.b2 = b2;
a1 = null;
b1 = null;
b2 = null;
}
}

最佳答案

最初分配给方法范围变量 b1 的对象不符合收集条件,因为 A 类 中对其的引用是静态。它不会随着 a1 的特定实例而过期。 a1.b1A.b1 是相同的引用,这是一种狡猾的 java 语法,但它就是这样。该引用将一直保持有效,直到类 A 被卸载/JVM 存在为止,无论 A 的任何实例(例如 a1)发生什么情况。

代码将方法中的指针b1赋值为null,但没有将A.b1赋值为null。

关于java - 有多少对象适合垃圾收集器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368878/

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