垃圾收集如何与集合对象一起使用?

时间:2011-07-07 21:14:50

标签: 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"));

假设人们仍被其他对象引用,但未引用存储在ArrayList人员中的一个Person对象。

当GC运行并查找未引用的对象时,它是垃圾收集未引用的Person对象还是跳过所有Person对象,因为person引用仍然被其他对象引用?

感谢任何回答。

1 个答案:

答案 0 :(得分:3)

ArrayList中存储的所有Person对象都由ArrayList本身引用,因此只要保持对ArrayList的引用,就会对每个Person对象进行间接引用。 GC不会碰它。

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