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)來分析該文件。