2016-11-30 77 views
0

我得到java.lang.OutOfMemoryError在我的Java應用程序之一。我在eclipse下的「VM參數」增加的最小和最大堆大小的尺寸:「OutOfMemoryError」的其他原因?

-XX:+HeapDumpOnOutOfMemoryError -Xmx8g -Xms2g However, I'm still getting same error. In jconsole.exe it displays the following: jconsole screenshot

如果我理解正確的話,那麼我仍然有足夠多的內存。

我也分析了使用eclipse MAT MAT screenshot

正如你可以看到內存轉儲,它顯示的問題,但只有9 MB。那麼究竟是什麼問題?我有沒有足夠的免費堆內存?

+1

看起來像你的問題是不可用的內存,但[內存泄漏](https://en.wikipedia.org/wiki/Memory_leak)。無論你分配多少內存,它最終都會拋出一個OOM。 – m0skit0

+0

你能指出你的Java版本/平臺,並把完整的異常消息?如果<= 1.7,它可能是一個permgen錯誤,... – pdem

+0

@pdem我有1.8 64位。完整消息「java.lang.OutOfMemoryError:Java堆空間」然後它打印堆棧跟蹤。正如m0skit0和JensB提到的,它與內存泄漏有關,需要修復,增加的堆內存無法解決問題 –

回答

1

與java沒有嚴格的關係,但這也可能是因爲嘗試在內存中存儲無法放在一個地方的東西。

考慮一個汽車停車場與每個停車位之間的金屬桿。 有20個空的摩托車點。 你想停放你的SUV。 即使可用空間的總面積大於您的車輛要求,您仍然無法停車,因爲它不適合任何單點。

我不知道這是否是這種情況,但這是我遇到這個問題最常見的原因。

您是否試圖在發生此錯誤的地方附近存儲比其他任何東西明顯更大的東西?

+0

感謝您的解釋。我想我必須做更深入的調試,然後代碼實際上不是我的,調試和理解它需要時間。我很好奇爲什麼增加堆大小不能解決問題。 –

+0

你說得對。我發現這個問題,它試圖創建一系列「1836020326」物品!這個數字是錯誤地從錯誤的字符串數據解析的。 –

相關問題