【发布时间】:2019-01-14 06:01:45
【问题描述】:
我从同行那里听说,当对象周围仍然存在引用时,不会发生垃圾收集。
但是,这是否也包括对子对象的引用?
例如,假设我们有这段代码
public class Bar {
public static Foo foo = getFoo();
private static Foo getFoo() {
List<Foo> list = List.of(new Foo(), new Foo(), new Foo());
return list.get(0);
}
}
然后 foo 在整个程序生命周期中使用。
但是,不再需要该列表,并且可以进行垃圾回收。唯一不能被垃圾回收的是第一个 Foo。
这是否意味着如果垃圾收集了列表,或者它不是因为它包含的对象正在其他地方使用(静态 Foo foo)?
此外,通过检查这些与内存管理相关的事情,有没有办法使用 IntelliJ 中的调试器查看垃圾收集的内容?
【问题讨论】:
-
这是否意味着如果垃圾收集了列表,还是因为它包含的对象正在其他地方使用(静态 Foo foo)? - 它得到垃圾收集,因为列表只存在于方法内部。您只返回第一个元素,这样该对象就不会被垃圾收集,其他一切都会。
标签: java memory memory-management garbage-collection