Heim >Java >javaLernprogramm >Wie verwende ich den Befehl jmap in Java?

Wie verwende ich den Befehl jmap in Java?

WBOY
WBOYnach vorne
2023-04-20 22:52:061713Durchsuche

Einführung in den jmap-Befehl

jmap (Java Virtual Machine Memory Map) ist ein vom JDK bereitgestelltes Befehlszeilentool, das eine Heap-Dump-Snapshot-Dump-Datei der Java Virtual Machine generieren kann. Darüber hinaus kann der Befehl jmap auch detaillierte Informationen über die Finalize-Ausführungswarteschlange, den Java-Heap und den Methodenbereich anzeigen, z. B. die Speicherplatznutzung, den aktuell verwendeten Garbage Collector, den Generierungsstatus usw.

Wie beim Befehl jinfo gibt es bei der Verwendung auf Windows-Systemen noch einige Einschränkungen. In Windows-Systemen ohne dbgeng.dll müssen die Debugging-Tools für Windows installiert sein, damit der Befehl jinfo ordnungsgemäß funktioniert, und die Umgebungsvariable PATH sollte den Speicherort von jvm.dll enthalten. dbgeng.dll的Windows系统中,必须安装用于Windows的调试工具才能使jinfo命令正常工作,PATH环境变量应该包含jvm.dll的位置。

jmap命令参数

命令语法:

jmap [options] pid

命令参数说明:

option:jmap命令的可选参数。如果没有指定这个参数,jinfo命令会显示Java虚拟机进程的内存映像信息,如下图:

Wie verwende ich den Befehl jmap in Java?

pid:要打印配置信息的Java虚拟机的进程ID。

想要要获取运行的Java虚拟机进程的列表,可以使用ps命令(Linux系统中)或tasklist命令(Windows系统中),如果Java虚拟机进程没有在单独的docker实例中运行,可以使用jps命令。

option都有哪些参数呢?我们来看一下。

-heap

显示Java堆的如下信息:

  • 被指定的垃圾回收算法的信息,包括垃圾回收算法的名称和垃圾回收算法的详细信息。

  • 堆的配置信息,可能是由命令行选项指定,或者由Java虚拟机根据服务器配置选择的。

  • 堆的内存空间使用信息,包括分代情况,每个代的总容量、已使用内存、可使用内存。如果某一代被继续细分(例如,年轻代),则包含细分的空间的内存使用信息。

比如:

Wie verwende ich den Befehl jmap in Java?

-histo[:live]

显示Java堆中对象的统计信息,包括:对象数量、占用内存大小(单位:字节)和类的完全限定名。比如:

Wie verwende ich den Befehl jmap in Java?

要获得某个对象的大小,可以将其总大小除以该对象类型的数量。如果指定了live参数,则只计算活动的对象。比如:

Wie verwende ich den Befehl jmap in Java?

-clstats

显示Java堆中元空间的类加载器的统计信息,包括:

class_loader:当Java虚拟机运行时,类加载器对象的地址
classes:已加载类的数量
bytes:该类加载器加载的所有类的元数据所占的字节数
parent_loader:父类加载器对象的地址,如果没有显示null
alive:是否存活的标识,表示类加载器对象是否将被垃圾回收。
type:该类加载器的类名。

比如:

Wie verwende ich den Befehl jmap in Java?

-finalizerinfo

显示在F-Queue中等待Finalizer线程执行finalize方法的对象。比如:

Wie verwende ich den Befehl jmap in Java?

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

生成Java虚拟机的堆转储快照dump文件。具体说明如下:

  • live参数是可选的,如果指定,则只转储堆中的活动对象;如果没有指定,则转储堆中的所有对象。

  • format=b表示以hprof二进制格式转储Java堆的内存。

  • file=<filename></filename>用于指定快照dump文件的文件名。

比如:

Wie verwende ich den Befehl jmap in Java?

-F

强制模式。如果指定的pid没有响应,可以配合-dump-histo

jmap-Befehlsparameter

Wie verwende ich den Befehl jmap in Java?Befehlssyntax:

rrreee

Befehlsparameterbeschreibung:

option: Optionale Parameter des jmap-Befehls. Wenn dieser Parameter nicht angegeben ist, zeigt der Befehl jinfo die Speicherbildinformationen des Java Virtual Machine-Prozesses an, wie unten gezeigt:

🎜So verwenden Sie den jmap-Befehl von Java🎜🎜pid: Die Prozess-ID der Java Virtual Machine zum Drucken von Konfigurationsinformationen. 🎜🎜Um die Liste der laufenden Java Virtual Machine-Prozesse abzurufen, können Sie den Befehl ps (in Linux-Systemen) oder den Befehl tasklist (in Windows-Systemen) verwenden. Wenn der Java Virtual Machine-Prozess nicht in einer separaten Docker-Instanz ausgeführt wird, können Sie Folgendes tun: kann jps Order verwenden. 🎜🎜Was sind die Parameter von option? Werfen wir einen Blick darauf. 🎜🎜-heap🎜🎜Zeigt die folgenden Informationen des Java-Heaps an: 🎜
  • 🎜Informationen des angegebenen Garbage-Collection-Algorithmus, einschließlich des Namens des Garbage-Collection-Algorithmus und der Nummer des Garbage-Collection-Algorithmus Details. 🎜
  • 🎜Die Heap-Konfigurationsinformationen können durch Befehlszeilenoptionen angegeben oder von der Java Virtual Machine basierend auf der Serverkonfiguration ausgewählt werden. 🎜
  • 🎜Informationen zur Heap-Speicherplatznutzung, einschließlich Generationsstatus, Gesamtkapazität, verwendetem Speicher und verfügbarem Speicher jeder Generation. Wenn eine Generation weiter unterteilt ist (z. B. die junge Generation), enthält es Informationen zur Speichernutzung für den unterteilten Raum. 🎜
🎜Zum Beispiel: 🎜🎜Javas jmap-Befehl So verwenden Sie 🎜🎜-histo[:live]🎜🎜 Zeigt statistische Informationen zu Objekten im Java-Heap an, einschließlich: Anzahl der Objekte, belegte Speichergröße (Einheit: Bytes) und vollständig qualifizierter Name der Klasse. Zum Beispiel: 🎜🎜So verwenden Sie den jmap-Befehl von Java🎜🎜Zu bekommen eine bestimmte Größe eines Objekts, indem seine Gesamtgröße durch die Anzahl dieses Objekttyps geteilt wird. Wenn der Parameter live angegeben ist, werden nur Live-Objekte gezählt. Zum Beispiel: 🎜🎜So verwenden Sie den jmap-Befehl von Java🎜🎜-clstats 🎜 🎜Zeigt die Statistiken des Klassenladers im Metaspace im Java-Heap an, einschließlich: 🎜🎜class_loader: Wenn die Java Virtual Machine ausgeführt wird, die Adresse des Klassenladerobjekts
classes: Die Anzahl der geladenen Klassenbytes: Die Anzahl der Bytes, die von den Metadaten aller von diesem Klassenlader geladenen Klassen belegt werden.
parent_loader: Die Adresse des übergeordneten Klassenladerobjekts, wenn null nicht angezeigt wird.
alive: Ein Flag, das angibt, ob das Klassenladeobjekt der Garbage Collection unterzogen wird.
Typ: Der Klassenname des Klassenladers. 🎜🎜Zum Beispiel: 🎜🎜So verwenden Sie den jmap-Befehl von Java🎜🎜 - finalizerinfo🎜🎜 zeigt die Objekte an, die in der F-Warteschlange darauf warten, dass der Finalizer-Thread die Finalize-Methode ausführt. Zum Beispiel: 🎜🎜So verwenden Sie den jmap-Befehl von Java🎜🎜-dump : [live,]format=b,file=🎜🎜Generieren Sie eine Heap-Dump-Snapshot-Dump-Datei der Java Virtual Machine. Die spezifischen Anweisungen lauten wie folgt: 🎜
  • 🎜live-Parameter ist optional. Wenn angegeben, werden nur die Live-Objekte im Heap ausgegeben. wenn nicht Wenn angegeben, werden alle Objekte im Heap ausgegeben. 🎜
  • 🎜format=b bedeutet, den Java-Heapspeicher im hprof-Binärformat zu sichern. 🎜
  • 🎜file=<filename></filename> wird verwendet, um den Dateinamen der Snapshot-Dump-Datei anzugeben. 🎜
🎜Zum Beispiel: 🎜🎜Javas jmap-Befehl So verwenden Sie den Force-Modus „ />🎜🎜-F🎜🎜. Wenn die angegebene PID nicht antwortet, kann sie zusammen mit <code>-dump</code> oder <code>-histo</code> verwendet werden. In diesem Modus wird der Live-Parameter nicht unterstützt. Zum Beispiel: 🎜🎜🎜🎜🎜-h und -help🎜🎜zeigen Hilfeinformationen für den jinfo-Befehl an. 🎜

Das obige ist der detaillierte Inhalt vonWie verwende ich den Befehl jmap in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen