Java的jmap命令使用詳解


jmap命令簡介

jmap(Java Virtual Machine Memory Map)是JDK提供的一個可以生成Java虛擬機的堆轉儲快照dump文件的命令行工具。除此以外,jmap命令還可以查看finalize執行隊列、Java堆和方法區的詳細信息,比如空間使用率、當前使用的什么垃圾回收器、分代情況等等。

和jinfo命令一樣,在Windows系統上使用還是有一些限制的。在沒有dbgeng.dll的Windows系統中,必須安裝用於Windows的調試工具才能使jinfo命令正常工作,PATH環境變量應該包含jvm.dll的位置。

jmap命令參數

命令語法:

jmap [options] pid

命令參數說明:

  • option:jmap命令的可選參數。如果沒有指定這個參數,jinfo命令會顯示Java虛擬機進程的內存映像信息,如下圖:

萬貓學社.png

  • pid:要打印配置信息的Java虛擬機的進程ID。

想要要獲取運行的Java虛擬機進程的列表,可以使用ps命令(Linux系統中)或tasklist命令(Windows系統中),如果Java虛擬機進程沒有在單獨的docker實例中運行,可以使用jps命令。

option都有哪些參數呢?我們來看一下。

-heap

顯示Java堆的如下信息:

  • 被指定的垃圾回收算法的信息,包括垃圾回收算法的名稱和垃圾回收算法的詳細信息。
  • 堆的配置信息,可能是由命令行選項指定,或者由Java虛擬機根據服務器配置選擇的。
  • 堆的內存空間使用信息,包括分代情況,每個代的總容量、已使用內存、可使用內存。如果某一代被繼續細分(例如,年輕代),則包含細分的空間的內存使用信息。

比如:

萬貓學社

-histo[:live]

顯示Java堆中對象的統計信息,包括:對象數量、占用內存大小(單位:字節)和類的完全限定名。比如:

萬貓學社.png

要獲得某個對象的大小,可以將其總大小除以該對象類型的數量。如果指定了live參數,則只計算活動的對象。比如:

萬貓學社.png

-clstats

顯示Java堆中元空間的類加載器的統計信息,包括:

class_loader:當Java虛擬機運行時,類加載器對象的地址
classes:已加載類的數量
bytes:該類加載器加載的所有類的元數據所占的字節數
parent_loader:父類加載器對象的地址,如果沒有顯示null
alive:是否存活的標識,表示類加載器對象是否將被垃圾回收。
type:該類加載器的類名。

比如:

萬貓學社.png

-finalizerinfo

顯示在F-Queue中等待Finalizer線程執行finalize方法的對象。比如:

萬貓學社.png

-dump:[live,]format=b,file=

生成Java虛擬機的堆轉儲快照dump文件。具體說明如下:

  • live參數是可選的,如果指定,則只轉儲堆中的活動對象;如果沒有指定,則轉儲堆中的所有對象。
  • format=b表示以hprof二進制格式轉儲Java堆的內存。
  • file=<filename>用於指定快照dump文件的文件名。

比如:

萬貓學社.png

-F

強制模式。如果指定的pid沒有響應,可以配合-dump-histo一起使用。此模式下,不支持live參數。比如:

萬貓學社.png

-h 和 -help

顯示jinfo命令的幫助信息。

最后,謝謝你這么帥,還給我點贊關注

微信公眾號:萬貓學社

微信掃描二維碼

關注后回復「電子書」

獲取12本Java必讀技術書籍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM