0Pricing
Java Academy · Lezione

Flag per il tuning del GC e profiling con JVisualVM

Imposti i flag per le dimensioni dell'heap, abiliti i log del GC e utilizzi JVisualVM per analizzare l'uso dell'heap in un'app in esecuzione.

Flag per il tuning del GC e profiling con JVisualVM è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 4 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.

Perché ottimizzare il GC?

Le impostazioni predefinite del GC funzionano bene per molte applicazioni, ma i carichi di lavoro ad alto throughput o a bassa latenza possono richiedere un'ottimizzazione. Misuri prima: non ottimizzi mai alla cieca.

Flag per le dimensioni dell'heap

Imposti l'heap iniziale (-Xms) e quello massimo (-Xmx). In produzione, li imposti allo stesso valore per evitare pause dovute al ridimensionamento dinamico. Inizi con il 60-70% della RAM disponibile.

// Example production flags:
java -Xms2g -Xmx2g -XX:+UseG1GC MyApp
// Avoid:
java -Xmx8g MyApp  // initial = 256m, max = 8g → resizing pauses

Dimensioni della generazione Young

Aumenti la generazione Young nelle applicazioni con molte allocazioni per ridurre la frequenza dei Minor GC. Utilizzi -Xmn o -XX:NewRatio (rapporto Old:Young, predefinito 2).

// Set Young Gen to 1 GB:
java -Xmx4g -Xmn1g MyApp
// Or via ratio:
java -Xmx4g -XX:NewRatio=3 MyApp  // 3GB old, 1GB young

Obiettivo delle pause di G1

Imposti -XX:MaxGCPauseMillis per indicare a G1 la durata massima desiderata per le pause. G1 ottimizza il proprio insieme di raccolta per raggiungere l'obiettivo, ma si tratta di un traguardo, non di una garanzia rigida.

java -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xmx8g MyApp
// G1 will try to keep pauses under 100 ms

Numero di thread del GC

Controlli il parallelismo con -XX:ParallelGCThreads (thread stop-the-world) e -XX:ConcGCThreads (thread concorrenti per G1/ZGC).

// On an 8-core machine:
java -XX:+UseG1GC -XX:ParallelGCThreads=8 -XX:ConcGCThreads=2 MyApp

Abilitare il logging del GC (JVM 9+)

Utilizzi il framework Xlog per acquisire gli eventi del GC. Analizzi i log offline per individuare pause lunghe, picchi di allocazioni e problemi di promozione.

java -Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=20m MyApp

Avviso sugli oggetti humongous

Gli oggetti più grandi del 50% di una regione G1 sono "humongous" e bypassano la generazione Young, passando direttamente alla generazione Old. Questo può causare frammentazione. Mantenga piccoli gli oggetti di grandi dimensioni oppure aumenti la dimensione delle regioni.

// Increase G1 region size (range: 1 MB to 32 MB, must be power of 2):
java -XX:+UseG1GC -XX:G1HeapRegionSize=16m -Xmx16g MyApp

Panoramica di JVisualVM

JVisualVM (incluso in JDK 8 e scaricabile per i JDK più recenti) offre un'interfaccia grafica per monitorare heap, GC, CPU e thread dei processi JVM locali e remoti.

Connettersi a una JVM remota

Abiliti JMX sul server per connettersi a JVisualVM da remoto. Aggiunga questi flag all'avvio della JVM di destinazione.

// 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 da JVisualVM

In JVisualVM, faccia clic con il pulsante destro del mouse sul processo → "Heap Dump". Il dump mostra gli oggetti attivi, le dimensioni trattenute e i riferimenti. Utilizzi la "OQL Console" per interrogare il dump con una sintassi simile a SQL.

Profilare la CPU con JVisualVM

Passi alla scheda Profiler e faccia clic su "CPU". JVisualVM strumenta i metodi e mostra gli stack di chiamate più attivi. Arresti il profiler per vedere quali metodi hanno utilizzato più tempo.

Java Flight Recorder e JVisualVisualVM

JFR ha un overhead inferiore (circa 1-2%) ed è adatto alla produzione. JVisualVM con il profiling ha un overhead maggiore ed è più indicato per lo sviluppo. Utilizzi JFR in produzione e JVisualVM per il debugging in fase di sviluppo.

Verifica rapida

Quale flag imposta la pausa massima obiettivo del GC per G1?

Riepilogo

In produzione, imposti -Xms == -Xmx. Ottimizzi -XX:MaxGCPauseMillis per G1. Abiliti il logging del GC con Xlog. Utilizzi JVisualVM per il debugging in fase di sviluppo e JFR per il profiling in produzione.

Domande Frequenti

La lezione «Flag per il tuning del GC e profiling con JVisualVM» è gratuita?

Sì — il testo completo di «Flag per il tuning del GC e profiling con JVisualVM» è 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 «Flag per il tuning del GC e profiling con JVisualVM»?

Imposti i flag per le dimensioni dell'heap, abiliti i log del GC e utilizzi JVisualVM per analizzare l'uso dell'heap in un'app in esecuzione. 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 4 di 4.

Quanto tempo richiede la lezione «Flag per il tuning del GC e profiling con JVisualVM»?

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. Regioni dell'heap della JVM e ciclo di vita degli oggetti
  2. Algoritmi GC: Serial, G1, ZGC, Shenandoah
  3. Rilevare e correggere i memory leak
  4. Flag per il tuning del GC e profiling con JVisualVM
← Torna a Java Academy