Die JVM-Optimierung dient hauptsächlich der Optimierung der Speicherverwaltung, einschließlich der Steuerung der Größe jeder Generation und der GC-Strategie. Da GC Anwendungsthreads beim Starten der Garbage Collection anhält, was die Leistung erheblich beeinträchtigt, besteht der Zweck der Optimierung darin, die durch GC verursachte Pausenzeit von Anwendungsthreads zu minimieren und die Anzahl der Vollständigen GC zu reduzieren.
Die kritischsten Parameter: -Xms, -Xmx, -Xmn, -XX: SurvivorRatio, -XX:MaxTenuringThreshold, -XX:PermSize, -XX:MaxPermSize
-Xms, -Xmx werden normalerweise auf den gleichen Wert gesetzt, um eine kontinuierliche Erweiterung des JVM-Speichers während der Laufzeit zu vermeiden. Dieser Wert bestimmt den maximalen Speicher, den der JVM-Heap verwenden kann.
-Xmn bestimmt die Größe des Raums der neuen Generation. Das Verhältnis der drei Bereiche der neuen Generation Eden, S0 und S1 kann durch -XX:SurvivorRatio gesteuert werden (wenn die Der Wert ist 4, das bedeutet: Eden :S0:S1 = 4:3:3 )
-XX:MaxTenuringThreshold steuert, wie viele Mal tritt das Objekt nach kleineren GC-Zeiten in das Alter ein. Dieser Parameter ist nur in Serial Serial GC gültig.
-XX:PermSize, -XX:MaxPermSize werden verwendet, um die Größe des Methodenbereichs zu steuern, normalerweise auf denselben Wert eingestellt.
1. Vermeiden Sie es, die neue Generationsgröße zu klein einzustellen
Wenn die Einstellung der neuen Generation zu klein ist, treten zwei offensichtliche Phänomene auf: Zum einen ist die Anzahl kleinerer GCs häufig und zum anderen können kleinere GC-Objekte direkt in die alte Generation gelangen. Wenn in der alten Generation nicht genügend Speicher vorhanden ist, wird Full GC ausgelöst.
2. Vermeiden Sie es, die neue Generation zu groß einzustellen
Wenn die junge Generation zu groß eingestellt wird, führt dies zu zwei Problemen: Erstens wird die alte Generation kleiner, was zu einer häufigen Ausführung von Full GC führen kann, und zweitens verlängert sich die Zeit für die Ausführung des Recyclings durch kleinere GC erheblich.
3. Vermeiden Sie, dass der Survivor-Bereich zu groß oder zu klein ist
-XX: Je größer der Wert des SurvivorRatio-Parameters ist, desto größer wird der Eden-Bereich und die Anzahl der kleineren GCs nimmt ab, aber die beiden Survivor-Bereiche werden kleiner, wenn Objekte, die die Speichergröße des Survivor-Bereichs überschreiten, im Minor gespeichert werden Wenn es nach der GC immer noch nicht recycelt wird, gelangt es direkt in das Alter,
-XX: Der SurvivorRatio-Parameterwert ist zu klein eingestellt, was bedeutet, dass der Eden-Bereich kleiner wird und die Anzahl der kleineren GC-Trigger zunimmt. Der Survivor-Bereich wird größer dass mehr in Moll gespeichert werden kann Die überlebenden Objekte nach GC werden daran gehindert, in das Alter einzutreten.
4. Legen Sie die Überlebenszeit des Objekts in der neuen Generation angemessen fest
Der Wert der Überlebenszeit der neuen Generation bestimmt, wie oft die Objekte der neuen Generation in die alte Generation eintreten, nachdem sie einer Minor GC unterzogen wurden. Daher sollte dieser Wert entsprechend Ihrer eigenen Anwendung angepasst werden. Dieser Wert für den Jvm-Parameter entspricht -XX:MaxTenuringThreshold und der Standardwert beträgt 15 Mal.
1. GC-Matching
Sehen Sie sich einen anderen Garbage Collector an
2. JVM-Parameter anzeigen
Befehlszeilentool Visuelles Tool
3.GC-Protokollparameter
-XX :+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:c:javagc.log
Das Obige ist der Inhalt von Java Virtual Machine Learning - Memory Tuning. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!