2011-07-15 60 views
0

我無法運行我的進程。它提供了以下異常:「異常線程‘main’java.lang.OutOfMemoryError:Java堆空間」線程「main」中的異常java.lang.OutOfMemoryError:超出GC開銷限制

java -Xms32m -Xmx516m FilteringSNP_genus Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) at java.lang.StringBuffer.append(StringBuffer.java:306) at java.io.BufferedReader.readLine(BufferedReader.java:345) at java.io.BufferedReader.readLine(BufferedReader.java:362) at FilteringSNP_genus.main(FilteringSNP_genus.java:65)

我已經嘗試了不同的內存使用的配置,如:

java -Xms32m -Xmx1024m FilteringSNP_genus

卻一直沒有工作,並增加了-XmxVALUE給予了GC overheadlimit超過例外:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded at java.lang.String.substring(String.java:1940) at java.util.StringTokenizer.nextToken(StringTokenizer.java:335) at FilteringSNP_genus.main(FilteringSNP_genus.java:77)

任何人都可以提供一些線索,以解決這一問題?

感謝

+0

一些更多的信息將被讚賞:主要是你的過程做了什麼(這是一個「你好世界」壞了,或者它真的是一個複雜的系統,可能需要所有的內存) – SJuan76

+0

你可以在FilteringSNP_genus.java :65 –

回答

1

我已經找到了GC會放棄,如果時間過長查找內存,即使內存居然有。最簡單的問題是內存大部分是虛擬的,這比實際的內存慢得多。另外,如果內存過於分散,GC可能需要一些時間才能找到所需的空間。如果你正在分配大量的記憶,那可能會使情況變得更糟。像GC這樣的問題可能是間歇性的,當GC有足夠的時間清理房屋並保持一切安排好,並且在超載時保持不變,這樣的問題可以是間歇性的。我的猜測是,在你的情況下,你要麼有分頁問題,​​要麼你的內存塊太大,太大。

解決方案:獲得更多的真實內存(如果分頁是問題)。使用更少的內存。使用較小的內存。數組是處理數字的最快方法,但帶指針的數據結構使GC的生活更輕鬆。如果你可以想出一個方法來使用更小的數組(或沒有數組),那就這樣做。

它應該有可能得到一個適當的64位系統(計算機和JVM)與8GB或更多的內存,所以你可以忽略和忘記這個問題,但我還沒有聽說過任何人這樣做。 (並且內存使用擴大以填充可用內存......)

+2

我相信你的意思是8GB,而不是8MB。改變了它。 –

+1

謝謝。 (我希望沒有人會認爲我記得8MB的內存很多,當我去「G」時我的手指滑落了。) – RalphChapin

+1

我記得1MB的時候很多:-) –

7

爲了方便起見,我會冒險猜測您正在從文件或套接字讀取數據,並且使用readLine()而不考慮其含義。改爲嘗試reading into a char[] buffer

或者,您正在閱讀線路並在內存中存儲對它們的嚴格引用,所以一旦您閱讀足夠的內容,您顯然會用完空間。

對於GC開銷誤差,根據本發明的Oracle JVM article: 「並行收集器將拋出一個OutOfMemoryError如果太多的時間被消耗垃圾收集:如果總時間的98%以上的垃圾收集中花費並且只有不到2%的堆被恢復,則會拋出OutOfMemoryError。「

+1

你在那裏做的最後一個聲明我沒有不知道。 +1有趣和有用的信息! –

+0

+1引發'GC開銷錯誤'! – damned

相關問題