首頁 > Java > java教程 > 如何使用Java中的jmap指令?

如何使用Java中的jmap指令?

WBOY
發布: 2023-04-20 22:52:06
轉載
1679 人瀏覽過

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虛擬機器程序的記憶體映像訊息,如下圖:

如何使用Java中的jmap指令?

pid:要列印設定資訊的Java虛擬機器的進程ID。

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

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

-heap

顯示Java堆的以下資訊:

  • #被指定的垃圾回收演算法的信息,包括垃圾回收演算法的名稱和垃圾回收演算法的詳細資訊。

  • 堆的設定訊息,可能是由命令列選項指定,或是由Java虛擬機器根據伺服器設定選擇的。

  • 堆的記憶體空間使用訊息,包括分代情況,每個代的總容量、已使用記憶體、可使用記憶體。如果某一代被繼續細分(例如,年輕代),則包含細分的空間的記憶體使用資訊。

例如:

如何使用Java中的jmap指令?

-histo[:live]

顯示Java堆中物件的統計訊息,包括:物件數量、佔用記憶體大小(單位:位元組)和類別的完全限定名。例如:

如何使用Java中的jmap指令?

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

如何使用Java中的jmap指令?

-clstats

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

class_loader:當Java虛擬機器運行時,類別載入器物件的位址
classes:已載入類別的數量
bytes:該類別載入器載入的所有類別的元資料所佔的位元組數
parent_loader:父類別載入器物件的位址,如果沒有顯示null
alive:是否存活的標識,表示類別載入器物件是否將被垃圾回收。
type:該類別載入器的類別名稱。

例如:

如何使用Java中的jmap指令?

-finalizerinfo

顯示在F-Queue中等待Finalizer執行緒執行finalize方法的物件。例如:

如何使用Java中的jmap指令?

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

產生Java虛擬機器的堆轉儲快照dump檔。具體說明如下:

  • live參數是可選的,如果指定,則只轉儲堆中的活動物件;如果沒有指定,則轉儲堆中的所有物件。

  • format=b表示以hprof二進位格式轉儲Java堆的記憶體。

  • file=<filename></filename>用來指定快照dump檔案的檔案名稱。

例如:

如何使用Java中的jmap指令?

-F

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

如何使用Java中的jmap指令?

-h 和 -help

顯示jinfo指令的幫助資訊。

以上是如何使用Java中的jmap指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板