2010-04-19 72 views
1

我有以下代碼快照:Java的內存管理

public void getResults(String expression, String collection){ 
ReferenceList list; 
Vector <ReferenceList> lists = new <ReferenceList> Vector(); 

list = invertedIndex.get(1)//invertedIndex is class member 

lists.add(list); 
} 

當方法完成後,我supose本地對象(列表,列表)「破壞」。你能否告訴我們是否釋放了存儲在invertedIndex中的列表佔用的內存?或者,java分配列表時分配新的內存list = invertedIndex.get(1);

+0

請注意,Vector是一個過時的數據結構,應該再次使用。 – 2010-04-20 10:06:24

回答

1

是,該方法返回後,lists將被標記爲垃圾回收。

listinvertedIndex將不會受到影響,除非get操作是破壞性的(即,其從自身去除list並返回它)。

+0

實際上我認爲只有列表會被標記爲垃圾回收,因爲列表不會分配任何內存。我對嗎? – pavlos 2010-04-19 17:05:54

+0

是的,好點。只有'list'變量本身使用的內存纔會被回收 - 而不是list指向的實際對象所使用的內存。 – 2010-04-19 17:18:04

2

想出listlists作爲對象的引用,而不是對象本身,當進行內存管理時。

方法被調用之前,你必須invertedIndex標記某個對象。由於它是從一個Class(保留在內存中)引用的,因此該對象不可用於垃圾回收。

裏面的方法創建一個矢量,並使用lists引用它。您還可以使用list將invertedIndex內的對象的一部分命名。

該方法被調用後,兩個名稱超出範圍。創建的矢量沒有其他引用,因此它可用於垃圾收集。但是,由list引用的對象仍由invertedIndex間接引用,因此它不可用於垃圾回收。

我希望這會有所幫助。

+0

非常感謝!它確實有幫助。 – pavlos 2010-04-19 17:09:13