2011-07-07 74 views
0

我很好奇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對象,因爲人員引用仍由其他對象引用?

任何答案表示讚賞。

+0

拍攝。錯誤的主題。不知道這是怎麼發生的。 – user826323

+0

我更新了你的主題;只是如果我弄錯了,我可以修復它。 :) –

+0

沒關係。謝謝。 – user826323

回答

3

存儲在ArrayList中的所有Person對象都由ArrayList自身引用,所以只要您維護對ArrayList的引用,就會對每個Person對象進行間接引用。 GC不會碰它。

如果你想想要 GC來收集這些流浪的Person對象,你可以在ArrayList中使用WeakReference而不是Person。