gpt4 book ai didi

java - JVM 上匿名变量的垃圾收集

转载 作者:行者123 更新时间:2023-11-30 06:19:33 26 4
gpt4 key购买 nike

我有一个理论问题,但找不到答案 -
假设我有一个单例实例 A,其内部私有(private)成员 a 和公共(public)成员
setter,现在假设我从另一个实例设置了这个成员
作为某些事件的结果,在私有(private)方法中类类型 B
即如果发生什么情况,我将从 B 的私有(private)方法中调用 A.setA(a)。


我的问题是 -
一旦B类实例的使用结束,A类实例仍然“存在”在系统中,
B类的实例会被垃圾回收吗?
即如果B使用匿名成员来初始化A的a。

提前致谢。

编辑-代码示例 -

public class A {
Object a;

public void setA(Object a) {
this.a = a;
}
}

public class B {

private void foo() {
if(...condition) {
A.getInstance().setA(new Object());
}
}

}

进一步解释一下 - 类 A 的实例在系统中是单例,没有其他类引用类 B 的实例,并且在设置 A 的私有(private)成员后完成了它的一部分

最佳答案

任何对象只要不再被视为活着,就可以作为垃圾被收集。

另一个生命对象引用一个对象时,该对象就活着。换句话说:只要从某个地方引用了 B 对象,就无法收集它。请参阅here例如。

这里 B 类中的代码在做什么绝对不重要。唯一重要的是: B 对象是否仍然从某个地方引用。从这个意义上说,您应该研究 GC 一般是如何工作的,请参阅 here例如。

关于java - JVM 上匿名变量的垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48461724/

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