我很好奇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/