Java, ciclo di vita degli oggetti e garbage collection

Su questo argomento si trova davvero poco online… davvero poco (almeno in italiano). Effettivamente si può considerare un argomento “di nicchia”, ma come si fa a non conoscere certi argomenti e poi esigere di esser chiamati “programmatori java”?
Comunque sia, chiariamo subito una cosa che sembra essere poco chiara:
In java, il ciclo di vita di un oggetto parte dal momento della sua creazione (cioè quando si usa la parola chiave new) e finisce quando l’oggetto è eliminato dal garbage collector.
In java l’allocamento degli oggetti nella RAM avviene in uno spazio di memoria riservato che prende il nome di heap. Per quanto questo spazio possa essere grande, esso è comunque finito e può quindi saturarsi. Per questo motivo la JVM, di tanto in tanto, ripulisce la heap dagli oggetti non più necessari. A tale scopo essa usa il garbage collector (gc). Esso è autonomamente in grado di decidere quali oggetti eliminare e quali no. Ma come fa questo strumento a prendere tali decisioni? Per rispondere a questa domanda dobbiamo necessariamente addentrarci nelle attività svolte dalla JVM.
Java è un sistema thread-based multitasking. Paroloni da paura che per adesso lasciamo così come sono. Quello che ci interessa sapere è che ogni thread ha il proprio runtime stack il quale viene usato per gestire l’esecuzione dei metodi. Ogni elemento di questo stack viene chiamato activation record e corrisponde ad una chiamata di un metodo. E’ proprio analizzando il runtime stack dei vari thread attivi che il garbage collector riesce a comprendere quale oggetto lasciare vivo e quale eliminare! Se il gc trova nella heap un oggetto che non ha alcun riferimento nei vari runtime stack e non viene richiamato da altri oggetti, allora il gc procede alla eliminazione dalla RAM di quell’oggetto, liberando memoria.

Hai letto questi articoli?

2 Commenti

I commenti sono chiusi.