Garbage collection e compilazione Just-In-Time (JIT)

Ottimizzazione del codice in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Garbage collection: le basi

Gestione manuale della memoria (C/C++)

  • Il programmatore alloca e libera esplicitamente
  • Facile incorrere in leak

$$

Garbage collection in Java

  • Allocazione automatica della memoria
  • Rilevamento automatico degli oggetti inutilizzati
  • Rilascio automatico della memoria
Ottimizzazione del codice in Java

Come funziona la garbage collection

  • Mark: identifica gli oggetti raggiungibili dalle radici
  • Sweep: rimuove gli oggetti non raggiungibili

Screenshot 2025-05-11 at 6.58.38 PM.png

Ottimizzazione del codice in Java

Garbage collection e prestazioni

Compromessi di performance del GC

  • Semplifica lo sviluppo ma ha impatti sulle prestazioni

$$

Algoritmi di GC

  • Le JVM moderne offrono vari algoritmi di garbage collection
  • La scelta dipende dai requisiti dell’applicazione
  • Una guida approfondita sugli algoritmi è disponibile qui
1 https://www.baeldung.com/jvm-garbage-collectors
Ottimizzazione del codice in Java

Impatto del GC sulle prestazioni

// Male: creare molti oggetti di breve durata
for (int i = 0; i < 1000000; i++) {
    new Object(); // Diventa subito garbage
}


// Meglio: riusare oggetti Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Una sola referenza }
Ottimizzazione del codice in Java

Scrivere codice GC‑friendly

// Evita questo nel codice critico per le prestazioni
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Crea una nuova String ogni volta
}


// Meglio così StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Riusa lo stesso buffer } String result = builder.toString();
Ottimizzazione del codice in Java

Compilazione Just-In-Time

  • Processo di esecuzione JVM:
    • Sorgente Java -> Bytecode
    • Bytecode -> Esecuzione interpretata
    • Metodi “hot” -> Codice macchina nativo
  • Ottimizza il codice eseguito spesso
Ottimizzazione del codice in Java

Pattern di codice JIT‑friendly

  • Scrivi codice prevedibile
// Rami prevedibili aiutano l’ottimizzazione del JIT
if (value > 0) {
    // Codice A - percorso frequente
} else {
    // Codice B - percorso raro
}
  • Crea metodi piccoli e mirati
  • Metodi piccoli e chiamati spesso sono ideali per l’inlining
  • Codice complesso si ottimizza peggio
Ottimizzazione del codice in Java

Riepilogo

  • Riduci al minimo la creazione di oggetti nei percorsi critici
  • Scrivi codice prevedibile in linea con le capacità del JIT
  • Ottimizza dove serve davvero: profila prima
Ottimizzazione del codice in Java

Passons à la pratique !

Ottimizzazione del codice in Java

Preparing Video For Download...