本文共 960 字,大约阅读时间需要 3 分钟。
堆转储文件中有什么呢?
每一个类有多少个对象,它们的值是什么,都可以在堆转储文件中找到。
除了使用visual VM 外,还可以使用jmap命令。特别是远程机器不给你开放端口连时,只能使用原始的命令行工具。
//将pid=9406这个java进程的堆,dump到heapDump.hprof文件中。live表示只输出存活对象的信息jmap -dump:live,format=b,file=heapDump.hprof 9406这只二进制格式的文件,无法直接阅读。后缀hprof可以理解为Heap PROFile。
图2-1 visual VM的heapDump文件分析视图
eclipse的一个插件。在Eclipse Marketplace中搜索即可安装。免费,功能比visualVM强大。
图3-1 搜索并安装Memory Analyzer
安装过后,即可打开一个.hprof文件尝试一下。
图3-2 Memory Analyzer的视图
OQL,Object Query Language,对象查询语言。
堆转储文件中的类有上千个,像java.lang.String这样的热门类,对象可能也有数千个。如何快速地查找自己感兴趣的对象,就要用到OQL了。
visualVM中的OQL与Memory Analyzer中的OQL语法是不一致的,需要注意!!
//在String类中搜索值为"Mozilla.*"的对象。需要注意通配符为‘*’,不是sql中的'%'select * from java.lang.String s where toString(s) like "Mozilla.*"