Memoria utilizzata dalla JVM
- Memoria statica:
- Utilizzata per i campi statici delle classi
- Allocata al momento in cui le classi vengono caricate per l'esecuzione
- La quantità di memoria statica necessaria per una classe può essere stabilita a priori esaminando esclusivamente il testo della classe
- Stack:
- Per contenere i dati usati dai singoli metodi che vengono man mano eseguiti
- La sua struttura evolve dinamicamente durante l'esecuzione in base alle chiamate dei metodi
- Heap:
- Per memorizzare gli oggetti creati dinamicamente durante l'esecuzione
Gestione dello heap
Gli oggetti vengono creati dinamicamente richiamando i costruttori all'interno di espressioni "new"
Quando un oggetto non è più accessibile l'area di memoria utilizzata dall'oggetto può essere recuperata e riutilizzata successivamente per altri oggetti
Garbage collector:
- recupera la memoria occupata da oggetti non più referenziati
- riorganizza lo heap rimediando ai problemi di allocazione dovuti alla frammentazione
Lo stack
Prende il nome dalla struttura dati utilizzata per gestirla, lo stack (pila)
Struttura LIFO: è possibile aggiungere o eliminare elementi solo in cima alla pila
Memoria stack:
- E' una pila di record di attivazione
- Ogni record di attivazione è un'area di memoria locale contenente i dati relativi a ciascun metodo attivato