2016-11-12 61 views
0
Java的堆空間
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.ArrayList.grow(Unknown Source) 
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) 
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source) 
    at java.util.ArrayList.add(Unknown Source) 
    at FibonacciHeap.removemax(FibonacciHeap.java:148) 
    at UseFibonacciHeap.main(UseFibonacciHeap.java:61) 

Eclipse的我的Java程序讀取從文件中的字符串,並將其插入到一個數組列表,並做了很多的計算ahead.It的拋出上述異常遇到150多串。我試圖增加虛擬機空間,使用睡眠,但沒有任何作品! 最終目標是在100萬個字符串上運行(並非全部都是唯一的)。java.lang.OutOfMemoryError:使用的ArrayList

編輯:ArrayList中toVisit的

用法:

for (FibonacciNode curr = max_ptr; toVisit.isEmpty() || toVisit.get(0) != curr; curr = curr.right_sibling) 
{ 
    toVisit.add(curr); 
    ... 
} 

VM參數爲類: -Xms1024m -Xmx1524M

可有人指導我這樣做的最佳方式。我可以使用不同的數據結構嗎?謝謝 !!

+1

加你的代碼問題。 Arraylist不應該耗盡內存這麼快,所以它很可能是錯誤在於如何使用您的數組列表 – baseballlover723

+0

顯示您的ecplise vm參數 –

+1

您可以給代碼更多的上下文嗎?什麼是所有變數?他們來自哪裏?我猜想你有一個無限循環的地方。 – baseballlover723

回答

0

你可以用-Xmx6g增加堆空間,但是150個字符串看起來像是一個非常小的數字,可以堆積起來。確保你使用的是StringBuffer或StringBuilder而不是String。

1

我認爲問題位於您的算法中,而不是您的記憶設置。

首先,你應該檢查什麼的代碼確實在其上印的堆棧跟蹤行:在UseFibonacciHeap.main(UseFibonacciHeap.java:61) 在FibonacciHeap.removemax(FibonacciHeap.java:148)