为什么hprof文件比给jvm的内存量要小得多
问题描述:
我们的代码使用-XX:+ HeapDumpOnOutOfMemoryError标志运行,所以我们在OOM上得到一个hprof文件。 最近我从安装中得到这样的文件,我用Eclipse内存分析器(MAT)打开它,我可以看到总大小为46MB,如果进程是用-Xmx1024m启动的,怎么会这样?为什么hprof文件比给jvm的内存量要小得多
不应该大小更接近最大分配大小?
这是与jdk1.6。
编辑:好的,现在我发现了一个similar question,事实上PermGen空间问题可能是原因,因为我的过程已经连续23天了。我经常创建新线程(据我所知,可以正常结束),也许每秒一次。有人知道我能否以某种方式证实这一点?
答
如果您未能创建非常大的对象,则会发生这种情况。即您创建失败的对象不在转储中。
yes我想到了这一点,但没有其他提示,在这...看我的编辑,我在这里找到一个相关的问题 – Persimmonium 2011-04-13 09:19:28
确认原因最简单的方法是读取原始异常。例如“java.lang.OutOfMemoryError:Java heap space”,“java.lang.OutOfMemoryError:PermGen space”或“java.lang.OutOfMemoryError:Direct buffer memory”此外,堆栈跟踪应该指出失败的操作,它应该给你一个线索。 – 2011-04-13 09:23:34
不幸的是我没有发现任何异常 – Persimmonium 2011-04-13 09:37:42