jmap
JVM Memory Map指令用于生成heap dump檔案,如果不使用這個指令,還可以使用-XX:+HeapDumpOnOutOfMemoryError參數來讓虛拟機出現OOM的時候自動生成dump檔案。 jmap不僅能生成dump檔案,還可以查詢finalize執行隊列、Java堆和永久代的詳細資訊,如目前使用率、目前使用的是哪種收集器等。

參數
option:選項參數,不可同時使用多個選項參數
pid:java程序id,指令ps -ef | grep java擷取
executable:産生核心dump的java可執行檔案
core:需要列印配置資訊的核心檔案
remote-hostname-or-ip:遠端調試的主機名或ip
server-id:可選的唯一id,如果相同的遠端主機上運作了多台調試伺服器,用此選項參數辨別伺服器
options參數
heap : 顯示Java堆詳細資訊
histo : 顯示堆中對象的統計資訊
permstat :Java堆記憶體的永久儲存區域的類加載器的統計資訊
finalizerinfo : 顯示在F-Queue隊列等待Finalizer線程執行finalizer方法的對象
dump : 生成堆轉儲快照
F : 當-dump沒有響應時,強制生成dump快照
示例
-dump
dump堆到檔案,format指定輸出格式,live指明是活着的對象,file指定檔案名
-heap
列印heap的概要資訊,GC使用的算法,heap的配置及使用情況,可以用此來判斷記憶體目前的使用情況以及垃圾回收情況.
-finalizerinfo
列印等待回收的對象資訊
-histo
列印堆的對象統計,包括對象數、記憶體大小等等。jmap -histo:live 這個指令執行,JVM會先觸發gc,然後再統計資訊
jmap -histo:live 11808 | grep StringBuffer 查詢類名包含StringBuffer的資訊
jmap -histo:live 11808 | grep StringBuffer > histo.txt 儲存資訊到histo.txt檔案