lezione 08

jvm e garbage collection

capire la memoria per ridurre pause e migliorare la stabilità.

livello: avanzato durata: 50 min output: tuning base badge: jvm memory

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 Xms e Xmx uguali 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.

start a brief