0Pricing
Java Academy · Lektion

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 pauses

Größ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 young

G1-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 ms

Anzahl 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 MyApp

GC-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 MyApp

Warnung 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 MyApp

JVisualVisualVM-Ü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 \
     MyApp

Heap-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

  1. JVM-Heap-Bereiche und Objektlebenszyklus
  2. GC-Algorithmen: Serial, G1, ZGC, Shenandoah
  3. Speicherlecks erkennen und beheben
  4. GC-Tuning-Flags und JVisualVM-Profiling
← Zurück zu Java Academy