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; |