我知道可以从 C++ 项目中转储 .dmp 文件。这个 dmp 文件可以由 Visual Studio 打开,这非常有用,因为您可以导航调用堆栈以查找变量值。
JVM也存在这种机制吗?
您可以使用-XX:HeapDump
JVM 选项。
使用以下 JVM 选项:
-XX:-HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath="/tmp"
JVM 会将堆的内容转储到指定目录中的文件中。请注意,这仅在OutOfMemoryError
抛出时发生,因为如果 JVM 由于其他原因而崩溃,则不需要转储。
您可能还想阅读http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html一次
每当您想要获取 JVM 转储时,都可以使用jmap 。
jmap -dump:format=b,file=/path/to/store/dumpfile jvmpid
您可以在启动时添加 JVM 选项以在 OOM 时获取 JVM 转储。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/store/dumpfile
Eclipse Memory Analyzer 是一种快速且功能丰富的 Java 堆分析器,可帮助您发现内存泄漏并减少内存消耗。
2.使用IBM HeapAnalyzer
HeapAnalyzer 允许通过其启发式搜索引擎和分析 Java 应用程序中的 Java 堆转储来发现可能的 Java™ 堆泄漏区域。
您可以远程调试(例如使用 Eclipse)您的 Java 应用程序,它允许您查看堆栈和变量内容。
或者您可以进行线程转储(例如使用jstack)。但这不包括变量。