GC-Tuning-Flags und JVisualVM-Profiling
Setzen Sie Flags für die Heap-Größe, aktivieren Sie GC-Logging und verwenden Sie JVisualVM, um die Heap-Nutzung einer laufenden App zu analysieren.
GC-Tuning-Flags und JVisualVM-Profiling ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum sollte man den GC tunen?
Die Standardkonfiguration des GC funktioniert für viele Anwendungen gut, aber Workloads mit hohem Durchsatz oder niedriger Latenz erfordern möglicherweise eine Anpassung. Messen Sie zuerst – tunen Sie niemals blind.
Flags für die Heap-Größe
Legen Sie den initialen Heap (-Xms) und den maximalen Heap (-Xmx) fest. Setzen Sie sie in der Produktion gleich, um Pausen durch dynamische Größenanpassungen zu vermeiden. Beginnen Sie mit 60–70 % des verfügbaren RAM.
// Example production flags:
java -Xms2g -Xmx2g -XX:+UseG1GC MyApp
// Avoid:
java -Xmx8g MyApp // initial = 256m, max = 8g → resizing pausesGröße der Young Generation
Vergrößern Sie die Young Gen bei Anwendungen mit vielen Allokationen, um die Häufigkeit von Minor-GCs zu verringern. Verwenden Sie -Xmn oder -XX:NewRatio (Verhältnis Old:Young, Standardwert 2).
// Set Young Gen to 1 GB:
java -Xmx4g -Xmn1g MyApp
// Or via ratio:
java -Xmx4g -XX:NewRatio=3 MyApp // 3GB old, 1GB youngG1-Pausenziel
Setzen Sie -XX:MaxGCPauseMillis, um G1 Ihr gewünschtes maximales Pausenziel mitzuteilen. G1 passt seine Collection Set an, um dieses Ziel zu erreichen – es handelt sich jedoch um ein Ziel und keine harte Garantie.
java -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx8g MyApp
// G1 will try to keep pauses under 100 msAnzahl der GC-Threads
Steuern Sie die Parallelität mit -XX:ParallelGCThreads (Stop-the-World-Threads) und -XX:ConcGCThreads (konkurrierende Threads für G1/ZGC).
// On an 8-core machine:
java -XX:+UseG1GC -XX:ParallelGCThreads=8 -XX:ConcGCThreads=2 MyAppGC-Logging aktivieren (JVM 9+)
Verwenden Sie das Xlog-Framework, um GC-Ereignisse zu erfassen. Analysieren Sie die Logs offline, um lange Pausen, Allokationsspitzen und fehlgeschlagene Promotionen zu erkennen.
java -Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=20m MyAppWarnung vor humongous Objekten
Objekte, die größer als 50 % einer G1-Region sind, werden als "humongous" bezeichnet. Sie umgehen die Young Gen und werden direkt in die Old Gen verschoben. Das kann zu Fragmentierung führen. Halten Sie große Objekte klein oder vergrößern Sie die Region-Größe.
// Increase G1 region size (range: 1 MB to 32 MB, must be power of 2):
java -XX:+UseG1GC -XX:G1HeapRegionSize=16m -Xmx16g MyAppJVisualVisualVM-Übersicht
JVisualVM (im JDK 8 enthalten, für neuere JDKs herunterladbar) bietet eine GUI zur Überwachung von Heap, GC, CPU und Threads lokaler und entfernter JVM-Prozesse.
Verbindung mit einer entfernten JVM
Aktivieren Sie JMX auf dem Server, um JVisualVM remote zu verbinden. Fügen Sie diese Flags zum Start der Ziel-JVM hinzu.
// Remote JVM flags:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
MyAppHeap-Dump aus JVisualVM
Klicken Sie in JVisualVM mit der rechten Maustaste auf den Prozess und wählen Sie → "Heap Dump". Der Dump zeigt aktive Objekte, ihre Retained Sizes und Referenzen. Verwenden Sie die "OQL Console", um den Dump mit einer SQL-ähnlichen Syntax abzufragen.
CPU-Profiling mit JVisualVM
Wechseln Sie zum Tab Profiler und klicken Sie auf "CPU". JVisualVM instrumentiert Methoden und zeigt häufig verwendete Call Stacks. Stoppen Sie den Profiler, um zu sehen, welche Methoden am meisten Zeit verbraucht haben.
Java Flight Recorder oder JVisualVM
JFR hat einen geringeren Overhead (etwa 1–2 %) und eignet sich für die Produktion. JVisualVM verursacht beim Profiling einen höheren Overhead und eignet sich besser für die Entwicklung. Verwenden Sie JFR in der Produktion und JVisualVM zum Debuggen während der Entwicklung.
Schnelltest
Welches Flag legt das maximale Ziel für die GC-Pause bei G1 fest?
Zusammenfassung
Setzen Sie in der Produktion -Xms == -Xmx. Tunen Sie -XX:MaxGCPauseMillis für G1. Aktivieren Sie das GC-Logging mit Xlog. Verwenden Sie JVisualVM zum Debuggen während der Entwicklung und JFR für das Profiling in der Produktion.
Häufig gestellte Fragen
Ist die Lektion „GC-Tuning-Flags und JVisualVM-Profiling“ kostenlos?
Ja — der vollständige Text von „GC-Tuning-Flags und JVisualVM-Profiling“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „GC-Tuning-Flags und JVisualVM-Profiling“?
Setzen Sie Flags für die Heap-Größe, aktivieren Sie GC-Logging und verwenden Sie JVisualVM, um die Heap-Nutzung einer laufenden App zu analysieren. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „GC-Tuning-Flags und JVisualVM-Profiling“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- JVM-Heap-Bereiche und Objektlebenszyklus
- GC-Algorithmen: Serial, G1, ZGC, Shenandoah
- Speicherlecks erkennen und beheben
- GC-Tuning-Flags und JVisualVM-Profiling