Dieser Artikel untersucht hauptsächlich das Verständnis von GC -Protokollen in Java -virtuellen Maschinen wie folgt.
Das Verständnis von GC -Protokollen ist eine grundlegende Fähigkeit im Umgang mit Java Virtual Machine -Speicherproblemen.
Geben Sie den entsprechenden GC -Typ an, indem Sie den Befehlstyp des Java -Befehlstyps auf Parameter hinzufügen, die GC -Protokollinformationen drucken und in Dateien und andere Richtlinien ausgeben.
öffentliche Klasse Referencountinggc {public Objectinstance = null; private static final int One_mb = 1024 * 1024; Private Byte [] BigSize = New Byte [2 * One_mb]; ReferenceCountingGc (); ReferenceCountingGC objb = Neue ReferencountingGc (); Obja.instance = objb; objb.instance = obja; obja = null; objb = null; System.gc ();}}}}}}}}Javac Referencountinggc.java
Java -xx:+printgcDatestamps -xx:+printgcDetails ReferencountingGC
Entsprechende Parameterliste
-Xx:+printgC Ausgabe GC -Protokoll
-XX:+printgcDetails Ausgabesdetaildariante von GC Ausgaben ausgibt
-Xx:+printgctimestamps Zeitstempelausgänge GC (in Form der Referenzzeit)
-Xx:+printgcDatestamps Ausgabe des Zeitstempels von GC (in Form von Datum, wie z. B. 2013-05-04T21: 53: 59.234+0800)
-Xx:+printheapatgc drucken Sie die Heap -Informationen vor und nach GC aus
-Xloggc: ../ logs/gc.log Ausgabepfad der Protokolldatei
Ergebnisse Ausgabe:
2016-03-20T14: 34: 55.118-0800: [GC [Psyoungggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 Sekunden] [Zeiten: Benutzer = 0,00 SYS = 0,00, real = 0,00 Sekunden]
2016-03-20T14:34:55.119-0800: [Full GC [PSYoungGen: 400K->0K(38912K)] [ParOldGen: 0K->282K(87040K)] 400K->282K(125952K) [PSPermGen: 2622K->2621K(21504K)], 0.0084640 Secs] [Zeiten: Benutzer = 0,01 sys = 0,00, real = 0,01 Sekunden]
Haufen
Psyoungggen Total 38912K, verwendet 1013k [0x00000007d5500000000, 0x00000007d80000000, 0x000000008000000000)
Eden Space 33792K, 3% verwendet [0x00000007d5500000, 0x000007d55fd7d0, 0x00000007d76000000)
Vom Space 5120K, 0% verwendet [0x00000007d7600000, 0x00000007d7600000, 0x00000007d7b000000)
zu Space 5120K, 0% verwendet [0x00000007d7b00000, 0x00000007d7b00000, 0x00000007d80000000)
Paroldgen Total 87040K, verwendet 282K [0x000007800000, 0x000007855000000, 0x000007d55000000)
Objektraum 87040K, 0% verwendet [0x00000007800000, 0x0000000780046bf8, 0x000007855000000)
PSPERMGEN TOTAL 21504K, verwendet 2628K [0x0000000077AE00000000, 0x000000077C3000000, 0x000007800000000)
Objektraum 21504K, 12% verwendet [0x000000077AE00000000.0x00000077b091380.0x00000077C3000000)
Psyoungggen bedeutet die neue Generation, und dieser Name wird vom Sammler festgelegt, was paralleler Spulen ist. Paroldgen, permanent pspermgen
Sie können sehen, dass es zwei Arten von GC gibt: GC und Full GC. Es gibt eine vollständige Aussage, dass diesmal GC Stop-the-World passiert ist.
Der Clan GC (Minor GC): bezieht sich auf die im Clan auftretende Müllsammlung. Da die meisten Java -Objekte die Eigenschaften von Leben und Tod haben, ist die geringfügige GC sehr häufig und im Allgemeinen ist die Recyclinggeschwindigkeit sehr schnell.
Ältere GC (Major GC/Full GC): Bezieht sich auf GC, das im Alter auftritt. Major GC erscheint, das oft mindestens einmal von kleinem GC begleitet wird. Die Geschwindigkeit der Haupt -GC ist im Allgemeinen mehr als 10 -mal langsamer als kleiner GC.
[GC [Psyoungggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 Sekunden] [Zeiten: Benutzer = 0,00 SYS = 0,00, real = 0,00 Sekunden]
Die 6123K-> 400K (38912K) in der oben genannten Quadratklasse zeigt an, dass die Speicherfläche vor GC -> GC nach GC verwendet hat, und der 38912K in der runden Halterung dahinter ist die Gesamtkapazität des Speicherbereichs.
Die 6123K-> 400K (125952K) außerhalb der Quadratklammern bedeutet, dass der Java -Haufen die Kapazität vor GC verwendet hat -> Der Java -Haufen hat die Kapazität nach GC verwendet, und der 125952K in den runden Klammern ist die Gesamtkapazität des Java -Haufens.
[Zeiten: Benutzer = 0,00 sys = 0,00, real = 0,00 Sekunden] repräsentieren die vom Benutzer verbrauchte CPU -Zeit, die vom Kernelzustand verbrauchte CPU -Zeit und die Zeit der Wanduhr vom Start bis zum Ende des Betriebs. Der Unterschied zwischen der CPU-Zeit und der Wanduhrzeit besteht darin, dass die Wandtaktzeit verschiedene Wartezeiten ohne Operation umfasst, z. B. das Warten auf Festplatten-E/A und das Warten auf das Blockieren von Faden, während die CPU-Zeit diese Zeit nicht enthält.
Sie können einige Offline -Tools verwenden, um GC -Protokolle zu analysieren, z. Dies sind alles Open -Source -Tools. Benutzer können ihren Quellcode direkt über Versionskontrolltools für die Offline -Analyse herunterladen.
Im obigen dreht sich alles um die Analyse des GC -Protokolls der Java Virtual Machine, und ich hoffe, dass es für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!