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 pausesDimensioni 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 youngObiettivo 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 msNumero 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 MyAppAbilitare 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 MyAppAvviso 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 MyAppPanoramica 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 \
MyAppHeap 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
- Regioni dell'heap della JVM e ciclo di vita degli oggetti
- Algoritmi GC: Serial, G1, ZGC, Shenandoah
- Rilevare e correggere i memory leak
- Flag per il tuning del GC e profiling con JVisualVM