Cet article étudie principalement la compréhension des journaux GC dans les machines virtuelles Java, comme suit.
Comprendre les journaux GC est une compétence de base pour traiter les problèmes de mémoire de la machine virtuelle Java.
En ajoutant des paramètres au type de commande Java, spécifiez le type GC correspondant, imprimez les informations du journal GC et les sortiez dans les fichiers et autres politiques.
classe publique référencesCountingGC {instance d'objet public = null; private static final int one_mb = 1024 * 1024; octet privé [] bigSize = new byte [2 * one_mb]; public static void main (String [] args) {testgc ();} public static Void testgc () {référencé RéférencesCoutinggc (); référencementCoutinggc objb = new ReferenceCountinggc (); obja.instance = objb; objb.instance = obja; obja = null; objb = null; System.gc ();}}Javac références à la référencegc.java
java -xx: + printgcdatestamps -xx: + printgcdetails références
Liste des paramètres correspondante
-Xx: + PRINTGC Sortie GC Journal
-Xx: + printgcdetails sorti des journaux détaillés de GC
-Xx: + printgctimestamps horodat sort gc (sous forme de temps de référence)
-Xx: + PrintGcDateStamps Sortie L'Hordestamp de GC (sous la forme de date, comme 2013-05-04T21: 53: 59.234 + 0800)
-Xx: + PrintheApatGC Imprimez les informations sur le tas avant et après GC
-Xloggc: ../ journaux / gc.log de sortie du fichier journal
Sortie des résultats:
2016-03-20T14: 34: 55.118-0800: [GC [Psyounggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 SECS] [Times: User = 0,00 Sys = 0,00, réel = 0,00 Secs]
2016-03-20T14: 34: 55.119-0800: [GC complet [Psyounggen: 400K-> 0K (38912K)] [Parolngen: 0k-> 282K (87040K)] 400K-> 282K (125952K), 0,0084640 Secs] [Times: utilisateur = 0,01 sys = 0,00, réel = 0,01 sec]
Tas
Psyounggen total 38912K, utilisé 1013K [0x00000007d55000000, 0x00000007d80000000, 0x000000008000000000)
Eden Space 33792K, 3% utilisé [0x00000007d5500000, 0x00000007d55fd7d0, 0x00000007d76000000)
à partir de l'espace 5120K, 0% utilisé [0x00000007d7600000, 0x00000007d7600000, 0x00000007d7b000000)
à l'espace 5120K, 0% utilisé [0x00000007d7b00000, 0x00000007d7b00000, 0x00000007d80000000)
Paroldgen Total 87040K, utilisé 282K [0x0000000780000000, 0x00000007855000000, 0x00000007d55000000)
Espace objet 87040K, 0% utilisé [0x0000000780000000, 0x0000000780046BF8, 0x00000007855000000)
PSPERMGEN TOTAL 21504K, utilisé 2628K [0x0000000077AE000000, 0x000000077C3000000, 0x00000007800000000)
Espace objet 21504K, 12% utilisé [0x000000077Ae000000,0x00000077B091380,0x000077C3000000)
Psyounggen signifie la nouvelle génération, et ce nom est déterminé par le collectionneur, qui est un piégeage parallèle. Parolngen, PSPERMGEN en permanence
Vous pouvez voir qu'il existe deux types de GC: GC et GC complet. Il y a une déclaration complète selon laquelle Stop-the-World est arrivé à GC cette fois.
Le clan GC (Minor GC): fait référence à l'action de collecte des ordures qui se produit dans le clan. Parce que la plupart des objets Java ont les caractéristiques de la vie et de la mort, le GC mineur est très fréquent et généralement la vitesse de recyclage est très rapide.
GC plus ancien (major GC / GC complet): fait référence à GC qui se produit dans la vieillesse. Le GC majeur apparaît, qui s'accompagne souvent d'un GC mineur au moins une fois. La vitesse du GC majeur est généralement plus de 10 fois plus lente que le GC mineur.
[GC [PsyounGgen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 Secs] [Times: User = 0,00 SYS = 0,00, réel = 0,00 seconde]
Le 6123K-> 400K (38912K) à l'intérieur du support carré ci-dessus indique que la zone de mémoire a utilisé la capacité avant GC -> GC après GC, et le 38912K à l'intérieur du support ronde derrière est la capacité totale de la zone de mémoire.
Le 6123K-> 400K (125952k) à l'extérieur des crochets signifie que le tas Java a utilisé la capacité avant GC -> le tas Java a utilisé la capacité après GC, et le 125952K à l'intérieur des supports ronds derrière est la capacité totale du tas Java.
[Temps: l'utilisateur = 0,00 sys = 0,00, réel = 0,00 secondes] représentent respectivement le temps de CPU consommé par l'utilisateur, le temps de CPU consommé par l'état du noyau et le temps d'horloge mural écoulé du début à la fin de l'opération. La différence entre le temps du processeur et le temps d'horloge murale est que le temps d'horloge mural comprend divers temps d'attente non opérationnel, comme l'attente des E / S de disque et l'attente du blocage du fil, tandis que le temps du CPU n'inclut pas ces temps.
Vous pouvez utiliser des outils hors ligne pour analyser les journaux GC, tels que Gchisto de Sun (https://java.net/projects/gchisto) et gcViewer (https://github.com/chewiebug/gcViewer). Ce sont tous des outils open source. Les utilisateurs peuvent télécharger directement leur code source via des outils de contrôle de version pour une analyse hors ligne.
Ce qui précède concerne l'analyse du journal GC de Java Virtual Machine, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!