我们接着上一篇文章讲解:
4.2:查看内存中对象数量及大小
查看所有对象,包括活跃及非活跃的。使用命令:
Jmap -histo <pid> | more
查看活跃对象:
Jmap -histo:live <pid> | more
对象说明:
B: byte
C: char
D: double
F: float
I: int
J: long
z: Boolean
[]:数组 如 [I]:表示的是int数组
[L+类名:其他对象
4.3:将内存使用情况dump到文件中
在有些时候,我们需要将JVM当前内存中的情况进行分析。这个时候,我们就需要先将内存中数据放到文件中。
Jmap也支持dump。
用法:
jmap -dump:format=b,file=/home/dump.data 20031
Jmap -dump:format=b,file=dumpFileName<pid>
示例:
Cd到home。查看刚才dump的文件:
4.4:通过jhat对dump文件进行分析
刚才我们将JVM内存dump到了文件中,这个文件就是一个二进制文件。不方便查看,这时候,我们可以借助与其他工具进行查看。
可以使用jhat这个命令进行分析查看。
语法:
jhat -port <port> <file>
示例
查看分析后的数据:
我们可以通过浏览器+端口访问分析后的数据。
使用OQL查询:
在最后面,我们可以看到有个OQL查询功能:
OQL:Object Query Languagen
假设我们现在要查询字符串长度大于10000的内容:
OQL语句:select s from java.lang.String s where s.value.length >=10000
执行结果:
本文是《JVM学习系列》中的第三篇文章。如果想系统的学习,建议从本教程第一篇开始看。
下节预告: