2

我知道可以从 C++ 项目中转储 .dmp 文件。这个 dmp 文件可以由 Visual Studio 打开,这非常有用,因为您可以导航调用堆栈以查找变量值。

JVM也存在这种机制吗?

4

3 回答 3

2

您可以使用-XX:HeapDumpJVM 选项

使用以下 JVM 选项:

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

JVM 会将堆的内容转储到指定目录中的文件中。请注意,这仅在OutOfMemoryError抛出时发生,因为如果 JVM 由于其他原因而崩溃,则不需要转储。

您可能还想阅读http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html一次

于 2014-04-08T06:17:03.100 回答
1

如何获得 JVM 转储?

  1. 每当您想要获取 JVM 转储时,都可以使用jmap 。

    jmap -dump:format=b,file=/path/to/store/dumpfile jvmpid

  2. 您可以在启动时添加 JVM 选项以在 OOM 时获取 JVM 转储。

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/store/dumpfile

如何分析jvm转储文件?

  1. 使用内存分析器 (MAT)

垫

Eclipse Memory Analyzer 是一种快速且功能丰富的 Java 堆分析器,可帮助您发现内存泄漏并减少内存消耗。

2.使用IBM HeapAnalyzer

在此处输入图像描述

HeapAnalyzer 允许通过其启发式搜索引擎和分析 Java 应用程序中的 Java 堆转储来发现可能的 Java™ 堆泄漏区域。

于 2014-04-08T15:52:27.120 回答
0

您可以远程调试(例如使用 Eclipse)您的 Java 应用程序,它允许您查看堆栈和变量内容。

或者您可以进行线程转储(例如使用jstack)。但这不包括变量。

于 2014-04-08T07:21:26.403 回答