Sun JDK是否能在JVM崩溃时生成核心/堆转储文件?

10

当JVM崩溃时,有办法生成核心/堆转储文件吗?由于这些文件通常非常有帮助,可以找出代码中的错误。


3
退出程序时出现异常不等同于崩溃。 - Thorbjørn Ravn Andersen
"throw new OutOfMemoryError()"能否生成转储文件?我尝试过,但失败了。如果不行,您能提供一种生成核心/堆转储文件的情况吗?非常感谢。 - cheng
IBM的JVM可以通过编程方式告知生成这些转储文件,你可以在System.exit(0)之前执行此操作。我不知道有没有厂商独立的方法来完成这个任务。 - Thorbjørn Ravn Andersen
1
好的。我刚刚尝试过了。throw new OutOfMemoryError() 无法生成转储文件。使用 -Xmx 来限制内存空间并在代码中定义一个大数组可以生成堆转储。谢谢你的帮助。 - cheng
如果JVM抛出OutOfMemoryError并崩溃,那也没关系。 - Chao
2个回答

18

使用以下JVM选项:

-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath="/tmp"

当抛出OutOfMemoryError时,JVM将会把堆的内容转储到指定目录的文件中。请注意,只有在JVM由于不同原因崩溃而不需要进行转储时,才会发生这种情况。

编辑: "布尔选项通过-XX:+打开并通过-XX:-关闭"。文档


4
应该使用"-XX:+HeapDumpOnOutOfMemoryError"(带有加号符号),因为减号符号实际上是将其关闭。 - gerrytan

2

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