2016-02-13 37 views
0

假設整數向量:分配零和垃圾收集在Java中

Vector<Integer> v = new Vector<>(); 
v.add(14); 
... 
v.add(47); 
.. 

現在我想釋放內存此向量。我試圖從垃圾收集的角度弄清以下三種說法的區別。

選項1:

v.clear(); /*This will iterate over each object reference contained in v and assign null to it.*/ 
v = null; 

選項2:

v = null; 

選項3:

v = new Vector<>(); /*Just to be clear, I understand this statement also assigns a new object to v. :)*/ 

這是有道理的選項2和3是在垃圾收集換算的當量,但我想確定。任何人都可以幫助這三者之間的區別嗎?

具體而言:如果使用選項2,無論如何都會釋放爲什麼我需要清除?

+0

向量在很大程度上是一個遺留集合,在1998年被ArrayList取代。 –

+0

如果您計劃重用集合,則只需清除集合()。減少垃圾 –

+0

選項4:*完全不做任何事情*正常工作,v *仍然*收集垃圾。 Java爲你處理這件事,你不必明確地做。 –

回答

2

所有選項對gc都有相同的結果,選項1會在一段時間內保存gc(當然,這是你自己的代價)。因爲從已清除對象引用的所有對象都不會被引用,並且即使在收集第一個對象之前也會變成垃圾。

如果任何對象對它有零引用,它將被gc視爲垃圾。 即使兩個或更多的對象引用gc會檢測到的對方。

+0

這就是我的想法。謝謝。 – user181218

2

在Java中沒有任何明確的內存釋放需求。垃圾收集器自動執行。

gc()釋放沒有引用的內存。 v = null有助於說它已準備好進行垃圾回收。