如何分析jvm的内存溢出
查看整个内存状况
jmap -heap [pid]
本地运行一个test程序后,找到对应java进程id,输入jmap时发生错误
发现是本地装了两个版本的jdk,需要进入到一个jdk的bin目录下执行jmap命令。
查看堆中对象详细占用情况
jmap -histo [pid]
导出整个JVM的dump文件
jmap -dump:format=b,file=文件名 [pid]
jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况
jhat -J-Xmx1024M [file]
执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 IP:7000
打开浏览器,输入http://localhost:7000
点击show heap histogram
可以看出各个类的实例数量和使用的内存大小。
eclipse Memory Analyzer
Eclipse 提供的一个用于分析JVM 堆Dump文件的插件。借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。查看堆栈信息
jstack [pid]
jvm调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等。