命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

1. 用法

1.1. 参数

option: 选项参数。
pid: 需要打印配置信息的进程ID。
executable: 产生核心dump的Java可执行文件。
core: 需要打印配置信息的核心文件。
server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。
remote server IP or hostname 远程调试服务器的IP地址或主机名。

1.2. 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的参数

2. 使用示例

  1. 查看进程的内存映像信息

    jmap pid
  2. 显示Java堆详细信息

    jmap -head pid
    
    Heap Configuration:
       MinHeapFreeRatio         = 0 (1)
       MaxHeapFreeRatio         = 100 (2)
       MaxHeapSize              = 209715200 (200.0MB) (3)
       NewSize                  = 69730304 (66.5MB) (4)
       MaxNewSize               = 69730304 (66.5MB) (5)
       OldSize                  = 139984896 (133.5MB) (6)
       NewRatio                 = 2 (7)
       SurvivorRatio            = 8 (8)
       MetaspaceSize            = 21807104 (20.796875MB) (9)
       CompressedClassSpaceSize = 1073741824 (1024.0MB) (10)
       MaxMetaspaceSize         = 17592186044415 MB (11)
       G1HeapRegionSize         = 0 (0.0MB) (12)
    1 heap使用率小于0时进行收缩
    2 heap使用率大于100时进行扩张
    3 堆最大空间大小为200兆
    4 新生代空间大小为66.5兆
    5 新生代最大空间大小为66.5兆
    6 老生代大小为133.5兆
    7 新生代是老生代的1/2
    8 eden:survivior=8
    9 元数据空间大小为20兆
    10 压缩类空间大小为1G
    11 最大元数据大小
    12 G1垃圾回收期关键参数堆分区大小为0