【发布时间】:2011-11-02 23:16:08
【问题描述】:
我在我的应用程序中遇到了臭名昭著的 OutOfMemoryException,我没有简单地增加可用的堆空间量,而是试图调查问题所在,以防万一出现某种泄漏从我的应用程序。
我添加了 JVM 参数 -XX:+HeapDumpOnOutOfMemoryError,它在遇到 OutOfMemory 错误时创建一个堆转储。然后我分析了使用不同分析工具生成的转储文件。然后我开始使用 -Xmx 参数并观察模式。
让我感到困惑的是以下内容。为什么在分析转储时我发现所有对象的总大小远小于我使用 -Xmx 参数设置的总大小? 例如,假设我将 -Xmx 设置为“2048m”。当我分析转储文件时,我发现堆上总共有 400Mb 的对象。我期待找到2GB。我错过了什么吗?
【问题讨论】:
-
您是否检查过您的 OOME 是否确实提到了堆内存?有一些(相对不常见的)OOME 被抛出的情况,但并不是堆满了。
-
对,@Joachim,JVM x86 中的太多线程也因 OOM 异常而崩溃
标签: java out-of-memory heap-memory