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:<dump-options>:生成堆转储快照

F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.

help:打印帮助信息

J<flag>:指定传递给运行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;

参考资料

java 字节码

jvm 性能调优工具之 jmap