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