gpt4 book ai didi

java - 有多少对象符合垃圾收集器的条件

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:52:52 26 4
gpt4 key购买 nike

class A{
A aob;
public static void main(String args[]){
A a=new A();
A b=new A();
A c=new A();
a.aob=b;
b.aob=a;
c.aob=a.aob;
A d=new A().aob=new A(); //tricky assignement
c=b; //one object eligible GC
c.aob=null;
System.gc();
}
}

有两个对象可以进行垃圾回收,但其中一个很难理解。

A d=new A().aob=new A();

1) 我认为这条线会变成这样

A d = new A().aob = new A();
^ ^
O1 O2

O1 --> O2 --> null
^
|
d ----|

2) 但真正要做的是这个(所以一个符合条件的对象)为什么这样?

A d = new A().aob = new A();
^ ^
O1 O2

O1 --> O2 --> null
^
|
d -----------|

因为赋值是从右到左关联的。

A d = ( new A().aob = new A() );

谁能解释一下呢?谢谢

最佳答案

它从右到左开始。首先执行 new A() 并创建一个新对象。然后它被分配给另一个新对象A的字段aob。最后 d 引用属性 aob。这意味着第二个对象 A 符合垃圾回收条件。

就像:

A firstA = new A();
A secondA = new A();
secondA.aob = firstA;
A d = secondA.aob;

但是 secondA 对象是内联创建的,因此没有对它的引用并且它符合垃圾回收条件。

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

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