jmap命令有下面幾種常用的用法:
•jmap [pid]
•jmap -histo:live [pid] >a.log
•jmap -dump:live,format=b,file=xxx.xxx [pid]
用得最多是后面兩個。其中,jmap -histo:live [pid] 可以查看當前Java進程創建的活躍對象數目和占用內存大小。
jmap -dump:live,format=b,file=xxx.xxx [pid] 則可以將當前Java進程的內存占用情況導出來,方便用專門的內存分析工具(例如:MAT)來分析。
查看當前Java進程創建的活躍對象數目和占用內存大小: jmap -histo:live 18162 >test.log 將當前Java進程的內存占用情況導出來,方便用專門的內存分析工具(例如:MAT)來分析: jmap -dump:live,format=b,file=heapt18162.bin 18162
利用Eclipse Memory Analyzer Tool(MAT)打開heapt18162.bin文件:
下載地址:https://eclipse.org/mat/downloads.php
更多文章:https://www.javatang.com/archives/2017/10/30/53562102.html
https://blog.csdn.net/a1510841693/article/details/104770912
https://blog.csdn.net/lkp1603645756/article/details/82792117?locationNum=9&fps=1
jmap(Memory Map for Java)命令用於生成堆轉儲快照(一般稱為heapdump或dump文件)。
如果不使用jmap命令,要想獲取Java堆轉儲快照,還有一些比較“暴力”的手段:如-XX:+HeapDumpOnOutOfMemoryError參數,可以讓虛擬機在OOM異常出現之后自動生成dump文件,通過-XX:+HeapDumpOnCtrlBreak參數則可以使用[Ctrl]+[Break]鍵讓虛擬機生成dump文件,又或者在Linux系統下通過Kill -3命令發送進程退出信號“嚇唬”一下虛擬機,也能拿到dump文件。
jmap的作用並不僅僅是為了獲取dump文件,它還可以查詢finalize執行隊列、Java堆和永久代的詳細信息,如空間使用率、當前用的是哪種收集器等。
jmap有不少功能在Windows平台下都是受限的,除了生成dump文件的-dump選項和用於查看每個類的實例、空間占用統計的-histo選項在所有操作系統都提供之外,其余選項都只能在Linux/Solaris下使用。
jmap命令格式:
jmap [ option ] vmid
option選項的合法值與具體含義見表4-4。
表4-4 jmap工具主要選項

jmap -dump:format=b,file=heapt13817.bin 13817
文章來源:深入理解Java虛擬機:JVM高級特性與最佳實踐(第2版)4.2.4 jmap:Java內存映像工具