【发布时间】:2021-05-23 07:23:27
【问题描述】:
以下是合成的示例:
public class A3 {
B b = new B();
}
我了解到,一旦A3 的对象被 GC(或成为 GC 资格),B 的对象也将被 GC(或成为 GC 资格)。
现在,让我们考虑以下情况,因此根据我的理解,d.m1(); 之后,堆上的a3 对象将符合 GC 条件,但我认为 b 对象不符合 GC 条件。
我的两个理解是相互联系的,谁能帮我确定哪一个是错误的。
public class Testing {
public static void main(String[] args) {
D d = new D();
d.m1();
d.m2();
// do some more things...
}
}
public class A3 {
B b = new B();
public B getB() {
return b;
}
}
public class B{
public void m1() {
System.out.println("B.m1");
}
}
public class D{
B bd2;
public void m1() {
A3 a3 = new A3();
bd2 = a3.getB();
}
public void m2() {
bd2.m1();
}
}
更新:我确实理解“有资格获得 GC”和“实际获得 GC'ed”之间的区别,所以为了方便起见,假设对象一旦符合条件就会立即被 GC'ed .
【问题讨论】:
-
@SergeyAfinogenov 我没听懂你的问题。
-
@SergeyAfinogenov 谢谢,我并不是说它们在内部类的上下文中,所以更新了代码以更好地反映。
-
Recommended read,还有像Can java finalize an object when it is still in scope?这样的链接问答。总的来说,你关注的是大部分不相关的事情。
标签: java memory-management garbage-collection