2012-07-17 54 views
0

我有一個多線程程序,它處理大量的字符串操作,並且在幾個小時的執行後,內存超出並導致「java.lang.OutOfMemoryError:Java heap space」問題。而且我已經將我的整個內存用於java程序,即16 GB。Java中的內存問題

爲了測試我創建了下面的示例程序來理解問題,並且在重新初始化一個字符串生成器幾千次後,它會消耗超過5-10MB的內存,但是任何人都可以請求幫助克服這個問題。

StringBuilder strObj = new StringBuilder(); 
for(int i=0; i<50000; i++) { 
    strObj = null; 
    strObj = new StringBuilder(); 
} 
+7

這段代碼只會導致一個OOME,如果你運行GC。否則,所有舊的實例都會丟失,並且會被垃圾收集。換句話說,在正常使用情況下,這段代碼不會導致任何內存問題。 – jtahlborn 2012-07-17 19:33:28

+1

獲取一個分析器並使用它。 – bmargulies 2012-07-17 19:42:30

+0

要做多少個線程? – 2012-07-17 19:58:27

回答

1

它從什麼意義上消耗5-10MB的內存?你在這裏分配那麼多。在它需要內存之前,Java不會打擾它的回收。這不能導致OutOfMemoryError,而不是這種類型的代碼。

那麼,爲什麼不實際顯示導致OOME的那種代碼呢?

0

感謝支持人員,實際上我的問題是通過調用System.gc()語句手動垃圾收集後解決的。

+0

正;沒有你會注意到堆佔用率逐漸向年輕一代的規模限制蔓延,然後突然下降到空,這個週期永遠重複。 – 2012-07-18 13:43:40