0Pricing
Java Academy · Lezione

Analizzare con JDK Mission Control

Leggere le registrazioni JFR

Analizzare con JDK Mission Control è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.

Che cos'è JMC?

JDK Mission Control (JMC) è lo strumento grafico per analizzare le registrazioni JFR.

Apre un file .jfr e trasforma gli eventi grezzi in viste navigabili: metodi più dispendiosi, comportamento del GC, contesa dei lock, allocazioni e altro. Include anche una pagina di Automated Analysis che segnala i problemi probabili.

Ottenere JMC

JMC è un download standalone, poiché è stato separato dal JDK dopo JDK 8.

Scarichi una build di JMC da Adoptium o Oracle, la avvii e apra il file .jfr con File > Open File. Non serve alcun agent né riavviare l'applicazione: l'analisi viene eseguita sulla registrazione già acquisita.

La pagina Automated Analysis

La prima cosa che JMC mostra è Automated Analysis: un insieme di euristiche che assegna un punteggio alla registrazione.

Evidenzia elementi come pause lunghe del GC, un numero elevato di allocazioni, thread bloccati e il boxing da primitivi a oggetti. Ogni risultato include una gravità e una breve spiegazione: un ottimo punto di partenza prima di procedere manualmente.

Vista Method Profiling

La pagina Method Profiling aggrega i campioni di esecuzione in un albero delle chiamate.

I metodi con il self time più elevato sono gli hotspot della CPU. È possibile alternare le viste top-down, dal chiamante al chiamato, e bottom-up, con il metodo più caldo in primo piano, per capire sia cosa è lento sia chi lo chiama.

Flame graph

JMC visualizza i campioni degli stack come un flame graph: la larghezza è proporzionale al tempo impiegato.

Le fasce ampie nella parte superiore del grafico indicano dove la CPU trascorre effettivamente i suoi cicli. Questa visualizzazione rende evidente quale percorso di chiamate prevale, molto più rapidamente della lettura di una tabella ordinata.

Vista della garbage collection

Le pagine del GC mostrano la durata e la frequenza delle pause, oltre al collector utilizzato.

Cerchi pause lunghe o frequenti che danneggiano la latenza. Un tasso di allocazione elevato è generalmente correlato a raccolte frequenti della young generation: la soluzione è ridurre la continua creazione di oggetti, non cambiare collector.

Hotspot delle allocazioni

La vista TLAB Allocations di JMC indica dove vengono creati gli oggetti.

La combini con lo stack trace per trovare la riga esatta che effettua l'allocazione all'interno di un ciclo caldo. Spesso una piccola modifica — riutilizzare un buffer o evitare l'autoboxing — riduce drasticamente la pressione sul GC.

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");
    }
}

Contesa dei lock

Le viste Lock Instances e Java Monitor mostrano i thread in attesa della sincronizzazione.

Se molti thread si bloccano sullo stesso monitor, quel lock è un collo di bottiglia per la scalabilità. JMC mostra l'oggetto conteso e gli stack trace dei thread in attesa, così è possibile intervenire sulla sezione critica corretta.

Viste di thread e latenza

La pagina Threads mostra la timeline di ogni thread: in esecuzione sulla CPU, in park, in attesa di I/O o bloccato.

Questo consente di verificare se un rallentamento è CPU-bound o I/O-bound, esattamente la distinzione presentata nella lezione sui colli di bottiglia. Fasce ampie di 'waiting' indicano che il limite è l'I/O o un lock, non l'elaborazione.

Dal problema alla soluzione

Il flusso di lavoro è il seguente: apra la registrazione, legga Automated Analysis, analizzi l'area segnalata — profiling dei metodi, GC o lock — verifichi con il flame graph e la vista dei thread, quindi formuli un'ipotesi.

Modifichi una sola cosa, acquisisca una nuova registrazione e la confronti con la baseline. JMC trasforma un file binario in informazioni utili su cui agire.

Confrontare le registrazioni

Per dimostrare che un'ottimizzazione ha funzionato, confronti una registrazione 'prima' e una 'dopo'.

Acquisisca una JFR di riferimento, applichi una sola modifica, acquisisca un'altra registrazione e apra entrambe in JMC. Osservi le stesse viste — profiling dei metodi, GC e allocazioni — affiancate. Un miglioramento reale si manifesta con una riduzione del self time, meno pause del GC o un tasso di allocazione inferiore. Se non cambia nulla, annulli la modifica.

Verifica rapida

Nelle viste di profiling dei metodi e flame graph di JMC, che cosa indica il self time di un metodo, o una fascia ampia nella parte superiore?

Riepilogo

JMC legge le registrazioni JFR e le trasforma in informazioni utili:

  • Automated Analysis segnala in anticipo i problemi probabili.
  • Il profiling dei metodi e i flame graph rivelano gli hotspot della CPU tramite il self time.
  • Le viste di GC e allocazione mostrano la continua creazione di oggetti.
  • Le viste di lock e thread distinguono i carichi CPU-bound da quelli I/O- o lock-bound.
  • Analizzare in dettaglio, formulare un'ipotesi, correggere una sola cosa, registrare di nuovo e confrontare.

Domande Frequenti

La lezione «Analizzare con JDK Mission Control» è gratuita?

Sì — il testo completo di «Analizzare con JDK Mission Control» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.

Cosa imparerò in «Analizzare con JDK Mission Control»?

Leggere le registrazioni JFR Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Analizzare con JDK Mission Control»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Individuare i colli di bottiglia
  2. Java Flight Recorder
  3. Analizzare con JDK Mission Control
  4. Flag comuni per l'ottimizzazione della JVM
← Torna a Java Academy