我是JAVA的新手。 我在JAVA中实现的分布式框架之上运行一个程序。
当我使用大数据时,程序因OutOfMemory崩溃并出现一些错误堆栈。但是错误堆栈不包含我正在寻找的信息。
我想检查崩溃时哪些类型的数据结构(java对象)正在消耗堆空间。
是否有任何众所周知的技巧,方法或工具?
谢谢,
答案 0 :(得分:2)
在JVM中发生HeapDumpOnOutOfMemoryError
时,使用HeapDumpPath
和OutOfMemoryError
选项生成堆转储。
例如:
$ java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path MyApp
如果您怀疑内存泄漏,可以使用JDK附带的 例如: 然后,您可以使用YourKit等应用程序分析 <强>参考强> jmap
在应用运行时生成应用的堆转储。 / p>
jmap -dump:live,format=b,file=dump.hprof <pid>
dump.hprof
,以查明导致泄漏的代码。