heap sizing
definisci limiti chiari per heap e metaspace per evitare out of memory.
java -Xms512m -Xmx2g -XX:MaxMetaspaceSize=256m -jar app.jar
garbage collector
g1gc è un buon default. monitora pause e throughput.
-XX:+UseG1GC -XX:MaxGCPauseMillis=200
profiling
usa jfr e jvisualvm per identificare hot path e allocazioni eccessive.
- controlla frequenza gc
- analizza allocazioni per request
- identifica lock contesi
pattern di performance
usa object pooling solo quando misurato. preferisci immutabilità e cache.
attenzione ai logger sincroni: usa async per carichi alti.
esercizi
tunea la jvm per un servizio mock, misurando latenza p95.
analizza un heap dump e individua la classe più allocata.
checklist
- definisci heap in produzione
- monitora pause gc
- usa profiling periodico
- documenta il tuning
panoramica
In questo capitolo su performance e memoria jvm, gc, tuning e strumenti di analisi per backend solidi. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.
Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).
badge: performance tuning
obiettivi
- capire e applicare heap in uno scenario reale
- capire e applicare garbage collector in uno scenario reale
- capire e applicare profiling in uno scenario reale
- capire e applicare pattern in uno scenario reale
scheda rapida
import java.util.List;
public class Main {
public static void main(String[] args) {
var dati = List.of(1, 2, 3);
var out = dati.stream().map(x -> x * 2).toList();
System.out.println(out);
}
}
Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.
tips
- organizza package per dominio
- preferisci immutabilità dove possibile
- documenta le API pubbliche
- misura prima di ottimizzare
- usa strumenti di profiling
- riduci boxing
tip: Ottimizzare senza misure è solo ipotesi.
mini progetto
Benchmark semplice di due implementazioni.
- scrivi due varianti
- misura con timing
- ripeti più volte
- analizza risultati
output atteso: uno script o query ripetibile con risultati verificabili.