Java堆转储未生成。

8

无法在OutOfMemoryError时获取Java堆转储: 尝试了以下方法(one.exe是我的Java RCP应用程序):

one.exe -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Temp

但是没有帮助,文件夹路径是可访问的。我甚至尝试了像heap.hprof这样的名称,但没有结果。有人能在这里指导我吗?


这些属性是否传递到底层的JVM? - Brian Agnew
你的JDK版本是什么? - Juned Ahsan
JDK版本是jdk1.6.0_21。 我所做的是,在命令提示符中导航到我的rcp应用程序目录,即: C:\ ProgramFiles \ One \ one.exe -XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = C:\ Temp - user1782807
2个回答

2
有些抛出的堆溢出并不是真正的溢出,而是直接在计算后抛出。实际上,并没有溢出。例如DirectByteBuffer(使用allocateMemory)。

-2

-XX:+HeapDumpOnOutOfMemoryError 命令行选项。如果您指定了 -XX:+HeapDumpOnOutOfMemoryError 命令行选项,并且抛出 OutOfMemoryError,虚拟机将生成堆转储。

以上参数表示在 OOM 抛出时将生成 HeapDump。如果将 JVM 参数传递给 JVM,但没有生成堆转储,则意味着应用程序尚未遭受 OutOfMemory 条件。如果您需要确认,请获取应用程序的本地 stderr 日志文件,以检查是否发生了任何 OOM。或者包括 -verbose:gc jvm 参数并收集详细日志,并检查最后一次 GC 的 Java 堆的可用字节数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接