lezione 10

performance e memoria jvm

gc, tuning e strumenti di analisi per backend solidi.

livello: avanzato durata: 45 min output: tuning plan badge: performance tuning

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.

start a brief