Capire l’architettura della memoria JVM

Ottimizzazione del codice in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Cos’è la JVM?

  • Ambiente di esecuzione multipiattaforma
  • Converte bytecode (.class) in codice macchina
  • Gestione memoria e garbage collection
  • Compilazione Just-In-Time
Ottimizzazione del codice in Java

Panoramica dell’architettura di memoria JVM

Architettura della memoria JVM

Ottimizzazione del codice in Java

Memoria stack

  • Area per esecuzione metodi e variabili locali
  • Struttura LIFO (Last-In-First-Out)
  • Contiene:
    • Variabili locali
    • Tipi primitivi
    • Info sulle chiamate ai metodi
  • StackOverflowError se supera la dimensione
Ottimizzazione del codice in Java

Memoria heap

  • Contiene tutti gli oggetti e gli array
  • new crea un oggetto allocato nell’heap
  • Gestita dal garbage collector
  • Dimensione dinamica
  • Divisa in generazioni
Ottimizzazione del codice in Java

Memoria in azione

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Riferimento sullo Stack new ArrayList<>(); // Oggetto sull’Heap
items.add(new String("Item")); // Oggetto sull’Heap }
Ottimizzazione del codice in Java

Pattern di codice memory-efficient

// Inefficiente
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 oggetti
    list1.add(s);
}

// Meglio
List<String> list2 = new ArrayList<>();
String s = "value";  // Un solo oggetto
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Ottimizzazione del codice in Java

Riepilogo

  • La JVM gestisce la memoria con stack e heap
  • Stack: veloce, contiene primitivi e riferimenti
  • Heap: contiene gli oggetti
Ottimizzazione del codice in Java

Passiamo alla pratica !

Ottimizzazione del codice in Java

Preparing Video For Download...