我们接着上一篇文章讲解:

4.2:查看内存中对象数量及大小

查看所有对象,包括活跃及非活跃的。使用命令:

Jmap -histo <pid> | more


查看活跃对象:

Jmap -histo:live <pid> | more

JVM学习系列学习五_数据

对象说明:

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>

示例:

JVM学习系列学习五_it技术_02

Cd到home。查看刚才dump的文件:

JVM学习系列学习五_it技术_03

4.4:通过jhat对dump文件进行分析

刚才我们将JVM内存dump到了文件中,这个文件就是一个二进制文件。不方便查看,这时候,我们可以借助与其他工具进行查看。

可以使用jhat这个命令进行分析查看。

语法:

jhat -port <port> <file>

示例

JVM学习系列学习五_数据_04

查看分析后的数据:

我们可以通过浏览器+端口访问分析后的数据。

JVM学习系列学习五_数据_05

使用OQL查询:

在最后面,我们可以看到有个OQL查询功能:

JVM学习系列学习五_字符串长度_06

OQL:Object Query Languagen

假设我们现在要查询字符串长度大于10000的内容:

OQL语句:select s from java.lang.String s where s.value.length >=10000

执行结果:

JVM学习系列学习五_字符串长度_07

本文是《JVM学习系列》中的第三篇文章。如果想系统的学习,建议从本教程第一篇开始看。

下节预告:

JVM学习系列学习五_数组_08