jmap
命令用于生成 Java 进程、核心文件或远程调试服务的堆转储(heap dump)或打印出堆的内存映射。堆转储是一个快照,它捕获了 Java 堆在某一特定时刻的状态。
jmap
命令的输出格式主要包括以下几个部分:
头部信息:
Heap dump file: live, path=java_pidXXXXX.hprof
Number of entries: 1000000
Size of heap dump: 1073741824 bytes (or 1 GiB)
Full size of heap: 1073741824 bytes (or 1 GiB)
Heap dump file
: 堆转储文件的路径和名称。Number of entries
: 堆中对象的数量。Size of heap dump
: 堆转储文件的大小。Full size of heap
: Java 进程的堆的总大小。对象统计信息:
...
1000000000: 1000000.0% (1000000000.0/1000000000.0)
...
这部分显示了堆中每个对象的类名、对象数量以及对象所占的百分比。
对象实例详细信息:
...
1000000000: java.lang.String[] "thread-0" #1234 prio=5 os_prio=0 tid=0x00007f9d00000000 nid=0x1a03 waiting on condition [0x00007f9d01f0f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at SomeClass.someMethod(SomeClass.java:100)
- waiting to lock <0x00000000d60d8d80> (a java.lang.Object), which is held by thread-0
...
这部分显示了堆中每个对象的实例详细信息,包括类名、哈希码、锁信息等。
请注意,jmap
命令的输出格式可能会因 Java 版本和配置而有所不同。如果你需要更详细的输出格式,可以使用 -clstats
选项来获取类加载器统计信息,或者使用 -hprof
选项来生成一个更详细的堆转储文件,然后使用专用工具(如 Eclipse Memory Analyzer 或 VisualVM)来分析该文件。