“OutOfMemoryError”的其他原因?

Posted

技术标签:

【中文标题】“OutOfMemoryError”的其他原因?【英文标题】:Other reasons for "OutOfMemoryError "? 【发布时间】:2016-11-30 14:42:29 【问题描述】:

我的一个 java 应用程序中出现 java.lang.OutOfMemoryError。我在 Eclipse 中的“VM 参数”下增加了最小和最大堆大小的大小:

-XX:+HeapDumpOnOutOfMemoryError -Xmx8g -Xms2g 但是,我仍然遇到同样的错误。在 jconsole.exe 中,它显示以下内容:

如果我理解正确,那么我还有很多堆内存。

我还使用 eclipse MAT 分析了内存转储

如您所见,它显示有问题,但只有 9 MB。那么究竟是什么问题呢?我不应该有足够的可用堆内存吗?

【问题讨论】:

看起来你的问题不是可用内存而是memory leaks。不管你分配多少内存,它最终都会抛出 OOM。 您能否指出您的 java 版本/平台,并输入完整的异常消息?如果 可能是 permgen 错误 @pdem 我有 1.8 64 位。完整消息“java.lang.OutOfMemoryError: Java heap space”然后打印堆栈跟踪。正如 m0skit0 和 JensB 提到的,它与需要修复的内存泄漏有关,增加堆内存并不能解决问题 【参考方案1】:

与 java 没有严格的关系,但这也可能是由于试图在你的内存中存储一​​些不能在一个地方容纳所有内容的东西。

考虑一个停车场,每个停车位之间都有金属条。 有20个空摩托车点。 你想停放你的SUV。 即使可用空间的总面积大于您的车辆要求,您仍然无法停车,因为它无法容纳在任何一个位置。

我不知道这里是否是这种情况,但这是我遇到此问题的最常见原因。

您是否尝试在发生此错误的任何地方存储比其他任何东西大得多的东西?

【讨论】:

感谢您的解释。我想我必须做更深入的调试,代码实际上不是我的,调试和理解它需要时间。我很好奇为什么增加堆大小不能解决问题。 你是对的。我发现了问题,它试图创建“1836020326”项的数组!这个数字是从错误的字符串数据中错误地解析出来的。

以上是关于“OutOfMemoryError”的其他原因?的主要内容,如果未能解决你的问题,请参考以下文章

Twitter 工程师谈 JVM 调优

使用 profiling 工具查找 java 代码中 outOfMemoryError 的确切原因

错误原因:java.lang.OutOfMemoryError 加载图像

java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案

转载:java.lang.OutOfMemoryError: Java heap space解决方法

java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案