java - 垃圾回收如何处理集合对象?

标签 java collections garbage-collection

我很好奇GC如何处理存储在集合对象中的对象,例如ArrayList或Hashtable。

我有这个ArrayList。

ArrayList<Person> persons = new ArrayList<Person>();
persons.add(new Person("smith"));
persons.add(new Person("john"));
persons.add(new Person("harry"));
persons.add(new Person("nathan"));

假设 Person 仍被其他对象引用,但 ArrayList Person 中存储的 Person 对象之一未被引用。

当GC运行并查找未引用的对象时,它是否会对未引用的Person对象进行垃圾回收,或者跳过所有Person对象,因为Person引用仍然被其他对象引用?

任何答案都值得赞赏。

最佳答案

存储在 ArrayList 中的所有 Person 对象都由 ArrayList 本身引用,因此只要维护对 ArrayList 的引用,就可以间接引用每个 Person 对象。 GC 不会碰它。

如果您希望 GC 收集这些杂散的 Person 对象,您可以使用对 ArrayList 中的 Person 的 WeakReference 而不是 Person。

关于java - 垃圾回收如何处理集合对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617251/

相关文章:

对于任何域,Java SSL 握手总是获得 "PKIX path building failed"

java - 无法在 Fragment 内的 onResume() 方法中检索 View

java - 如何保持插入顺序

java - 如何为 log4j2 RollingFileAppender 进行编程配置

java - Spring Boot 中通过构造函数表达的不满足的依赖关系

java - 从主要包含空值的 Comparables 列表中获取最小值和最大值的最佳方法是什么?

c# - 如何在 C# 中的 List<string> 类型的公共(public)属性中添加值?

c# - HttpClientHandler/HttpClient 内存泄漏

java - 如何在 JVM 中强制/重现 Full GC?

c# - 应该定期调用 GC.Collect() 吗?