2016-11-30 65 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”物品!这个数字是错误地从错误的字符串数据解析的。 –