Analysieren mit JDK Mission Control
JFR-Aufzeichnungen lesen
Analysieren mit JDK Mission Control ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Was ist JMC?
JDK Mission Control (JMC) ist das grafische Werkzeug zur Analyse von JFR-Aufzeichnungen.
Es öffnet eine .jfr-Datei und wandelt Rohereignisse in navigierbare Ansichten um: häufig verwendete Methoden, GC-Verhalten, Sperrenkonflikte, Allokationen und mehr. Außerdem enthält es eine Seite Automated Analysis, die auf wahrscheinliche Probleme hinweist.
JMC beziehen
JMC wird separat heruntergeladen (nach JDK 8 wurde es aus dem JDK ausgegliedert).
Laden Sie JMC aus den Builds von Adoptium oder Oracle herunter, starten Sie es und öffnen Sie Ihre .jfr-Datei über Datei > Datei öffnen. Weder ein Agent noch ein Neustart Ihrer Anwendung ist erforderlich – Sie analysieren die bereits erstellte Aufzeichnung.
Die Seite Automated Analysis
Als Erstes zeigt JMC Automated Analysis: eine Reihe von Heuristiken, die Ihre Aufzeichnung bewerten.
Die Seite hebt unter anderem lange GC-Pausen, hohe Allokationsraten, blockierte Threads und das Boxing primitiver Werte in Objekte hervor. Jeder Befund enthält einen Schweregrad und eine kurze Erklärung – ein guter Ausgangspunkt, bevor Sie manuell tiefer einsteigen.
Ansicht Method Profiling
Die Seite Method Profiling fasst Ausführungssamples in einem Aufrufbaum zusammen.
Methoden mit der höchsten Self Time sind Ihre CPU-Hotspots. Sie können zwischen einer Top-down-Ansicht (vom Aufrufer zum Aufgerufenen) und einer Bottom-up-Ansicht (beginnend mit der Hotspot-Methode) wechseln, um sowohl zu verstehen, was langsam ist, als auch, wer es aufruft.
Flame Graphs
JMC stellt Stacksamples als Flame Graph dar: Die Breite ist proportional zur aufgewendeten Zeit.
Breite Plateaus nahe dem oberen Rand des Graphen zeigen, wo die CPU tatsächlich ihre Zyklen verbringt. Diese Darstellung macht deutlich, welcher Aufrufpfad dominiert – wesentlich schneller, als eine sortierte Tabelle zu lesen.
Ansicht Garbage Collection
Die GC-Seiten zeigen Pausendauern, Häufigkeit und den verwendeten Collector.
Achten Sie auf lange oder häufige Pausen, die die Latenz beeinträchtigen. Eine hohe Allokationsrate steht meist mit häufigen GCs der Young Generation in Zusammenhang – die Lösung besteht darin, unnötige Objekterzeugung zu reduzieren, nicht den Collector zu wechseln.
Allokations-Hotspots
Die Ansicht TLAB Allocations in JMC ordnet ein, wo Objekte erstellt werden.
Nutzen Sie zusätzlich den Stacktrace, um die genaue Zeile zu finden, die in einer Hot Loop allokiert. Oft reduziert eine kleine Änderung – etwa das Wiederverwenden eines Puffers oder das Vermeiden von Autoboxing – den GC-Druck drastisch.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Autoboxing: each add boxes an int into an Integer object
List<Integer> boxed = new ArrayList<>();
for (int i = 0; i < 5; i++) boxed.add(i);
System.out.println("Boxed " + boxed.size() + " Integers");
System.out.println("JMC allocation view would flag this hotspot");
}
}Sperrenkonflikte
Die Ansichten Lock Instances und Java Monitor zeigen Threads, die auf Synchronisierung warten.
Wenn viele Threads auf demselben Monitor blockiert sind, stellt diese Sperre einen Skalierungsengpass dar. JMC zeigt das umkämpfte Objekt und die Stacktraces der wartenden Threads, sodass Sie den richtigen kritischen Abschnitt gezielt untersuchen können.
Ansichten für Threads und Latenz
Die Seite Threads zeigt die Zeitachse jedes Threads: auf der CPU ausgeführt, geparkt, auf IO wartend oder blockiert.
So können Sie bestätigen, ob eine Verlangsamung CPU-bound oder IO-bound ist – genau diese Unterscheidung wurde in der Lektion zu Engpässen behandelt. Breite „waiting“-Bänder bedeuten, dass Sie an IO oder einer Sperre hängen, nicht an der Berechnung.
Vom Befund zur Lösung
Der Ablauf: Öffnen Sie die Aufzeichnung, lesen Sie Automated Analysis, gehen Sie in den markierten Bereich (Method Profiling, GC oder Sperren), bestätigen Sie den Befund mit dem Flame Graph und der Thread-Ansicht und formulieren Sie anschließend eine Hypothese.
Ändern Sie eine Sache, erstellen Sie eine neue Aufzeichnung und vergleichen Sie sie mit Ihrer Baseline. JMC verwandelt eine Binärdatei in umsetzbare Erkenntnisse.
Aufzeichnungen vergleichen
Um nachzuweisen, dass eine Optimierung funktioniert hat, vergleichen Sie eine Aufzeichnung „vorher“ mit einer Aufzeichnung „nachher“.
Erstellen Sie eine JFR-Baseline, nehmen Sie eine Änderung vor, erstellen Sie eine weitere Aufzeichnung und öffnen Sie beide in JMC. Betrachten Sie dieselben Ansichten – Method Profiling, GC und Allokationen – nebeneinander. Eine echte Verbesserung zeigt sich durch geringere Self Time, weniger GC-Pausen oder eine niedrigere Allokationsrate. Wenn sich nichts verändert hat, machen Sie die Änderung rückgängig.
Kurzer Test
Was zeigt die Self Time einer Methode beziehungsweise ein breites Plateau am oberen Rand in den Ansichten Method Profiling und Flame Graph an?
Zusammenfassung
JMC liest JFR-Aufzeichnungen und macht sie nutzbar:
- Automated Analysis weist frühzeitig auf wahrscheinliche Probleme hin.
- Method Profiling und Flame Graphs machen CPU-Hotspots anhand der Self Time sichtbar.
- GC- und Allokationsansichten zeigen unnötige Speicheraktivität.
- Sperren- und Thread-Ansichten unterscheiden zwischen CPU-bound und IO- oder lock-bound.
- Gehen Sie ins Detail, formulieren Sie eine Hypothese, beheben Sie eine Sache, erstellen Sie eine neue Aufzeichnung und vergleichen Sie.
Häufig gestellte Fragen
Ist die Lektion „Analysieren mit JDK Mission Control“ kostenlos?
Ja — der vollständige Text von „Analysieren mit JDK Mission Control“ 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 „Analysieren mit JDK Mission Control“?
JFR-Aufzeichnungen lesen 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 3 von 4.
Wie lange dauert die Lektion „Analysieren mit JDK Mission Control“?
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
- Bottlenecks identifizieren
- Java Flight Recorder
- Analysieren mit JDK Mission Control
- Gängige JVM-Tuning-Flags