2014-04-14 29 views
2
for(int i=0; i<100; i++){ 
    List<Integer> ls =new ArrayList<Integer>(); 
    ls.add(1); 
} 

在每次迭代之後,分配的內存是否仍然存在。我的意思是我想釋放他們。如果我希望它不在那裏,我該怎麼辦?java中的已分配內存是否保留在下面的代碼中

我遇到了一個內存不足的問題,我不知道它是否被這樣的事情引起與否

+0

如果您無法訪問'ls',它會如何保留? – SSpoke

+4

@SSpoke這是部分正確的。內存空間是由JVM分配的。我沒有考慮任何可能影響整個事情的潛在優化。但內存不會立即回收。 GC會隨時運行。 – Kon

+0

我面對一個內存問題,它是否因爲大量數據而導致這些問題? – user3495562

回答

2

lsfor循環中的局部變量。這意味着一旦迭代完成,可以被垃圾收集,並且確實被標記爲這樣。 JVM是否決定收集它是一個完全不同的問題,並且取決於JVM的實現。它可以通過傳遞給java的參數(例如,-Xms,-Xmx或臭名昭着的-XX:參數)來實現,但不能嚴格控制。

相關問題