gpt4 book ai didi

java - 执行 "m1=null; m2=null;"后有多少对象可以进行垃圾回收?

转载 作者:IT老高 更新时间:2023-10-28 13:52:11 25 4
gpt4 key购买 nike

执行完m1 = null; m2 = null;后我一头雾水。有多少对象符合垃圾回收条件?

public class MyTest {
MyTest m;

void show() {
System.out.println("Hello this is show method.");
}

public static void main(String args[]) {
MyTest m1 = new MyTest();
MyTest m2 = new MyTest();
MyTest m3 = new MyTest();
m1.m = m2;
m2.m = m3;
m3.m = m1;
m1 = null;
m2 = null;
// Question here: How many objects will be eligible for garbage collection?
}
}

最佳答案

零。

对象引用图如下:

Circular

你可以看到引用是循环的。从 mainm3 的引用使 m3 对象保持 Activity 状态。反过来,m3 使 m1 保持 Activity 状态,从而使 m2 不被 GC。

请注意,如果您将 m3 设置为 null,则所有三个对象都将同时符合 GC 条件,尽管每个对象都存在循环引用。 GC 足够聪明,可以确定所有引用都来自符合 GC 条件的对象,并收集所有三个。

关于java - 执行 "m1=null; m2=null;"后有多少对象可以进行垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33258627/

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