jmap 概述
命令jmap是一个多功能的命令。
它可以生成 java 程序的 dump 文件,也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
参数
option:选项参数。
pid:需要打印配置信息的进程ID。
executable:产生核心dump的Java可执行文件。
core:需要打印配置信息的核心文件。
server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。
remote server IP or hostname 远程调试服务器的IP地址或主机名。
option
no option: 查看进程的内存映像信息,类似 Solaris pmap 命令。
heap: 显示Java堆详细信息
histo[:live]: 显示堆中对象的统计信息
clstats:打印类加载器信息
finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
dump::生成堆转储快照
F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.
help:打印帮助信息
J:指定传递给运行jmap的JVM的参数
查看存活对象的例子
命令
$ jmap -histo:live pid
描述:显示堆中对象的统计信息
其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。
如果指定了live子选项,则只计算活动的对象。
实际执行
获取 pid
$ ps -ef | grep "java"
获取对应的 java 信息 pid 为 13176
执行命令
$ jmap -histo:live 13176 | head -n 10
效果
num #instances #bytes class name
----------------------------------------------
1: 255431 27355352 [C
2: 23394 7981960 [I
3: 206158 6597056 java.util.HashMap$Node
4: 253204 6076896 java.lang.String
5: 107719 5107880 [Ljava.lang.Object;
6: 7434 4528920 [B
7: 44800 4300800 java.util.jar.JarFile$JarFileEntry
字段解释
标识字符
含义
B
基本类型byte
C
基本类型char
D
基本类型double
F
基本类型float
I
基本类型int
J
基本类型long
S
基本类型short
Z
基本类型boolean
V
特殊类型void
L
对象类型,以分号结尾,如Ljava/lang/Object;
参考资料