memory model
la JVM gestisce heap, stack, metaspace e native memory. capire dove vive un oggetto aiuta a prevedere le pause.
| area | cosa contiene |
|---|---|
| heap | oggetti e array |
| stack | frame dei thread |
| metaspace | class metadata |
garbage collector
G1 è il default moderno. ZGC e Shenandoah riducono pause ma richiedono più memoria.
# esempio flag
java -XX:+UseG1GC -Xms2g -Xmx2g -jar app.jar
tuning base
- imposta
XmseXmxuguali per stabilità. - riduci l'allocazione di oggetti temporanei.
- usa pool di oggetti solo quando dimostrato utile.
monitoraggio
jcmd <pid> GC.heap_info
jstat -gc <pid> 1s
abilita i GC log per analizzare pause e throughput.
pattern di allocazione
- riusa buffer e builder per evitare garbage corto.
- preferisci primitive a wrapper quando possibile.
- riduci la dimensione di collezioni preallocando.
minore allocazione = minor pressione sul GC.
checklist finale
- misura pause GC con log e metriche.
- limita l'allocazione di oggetti temporanei.
- usa flag con cautela e valida in staging.
- documenta i parametri per ogni ambiente.
panoramica
In questo capitolo su jvm e garbage collection, capire la memoria per ridurre pause e migliorare la stabilità. 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: jvm memory
obiettivi
- capire e applicare memory model in uno scenario reale
- capire e applicare garbage collector in uno scenario reale
- capire e applicare tuning base in uno scenario reale
- capire e applicare monitoraggio 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
- riduci allocazioni inutili
- riusa buffer
- osserva GC log
tip: Le pause GC sono un sintomo, non la causa: cerca le allocazioni.
mini progetto
Simula allocazioni e osserva comportamento GC.
- scrivi loop di allocazioni
- monitora memoria
- modifica dimensione heap
- confronta output
output atteso: uno script o query ripetibile con risultati verificabili.