我很好奇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引用仍然被其他对象引用?
感谢任何回答。
答案 0 :(得分:3)
ArrayList中存储的所有Person对象都由ArrayList本身引用,因此只要保持对ArrayList的引用,就会对每个Person对象进行间接引用。 GC不会碰它。
如果希望 GC收集这些迷路Person对象,则可以使用WeakReference对ArrayList中的Person而不是Person。