giulio0 ha scritto:
Mi sarebbe utili perlopiù una spiegazione generale del garbage collection. Non ho trovato molto su internet, ho capito solamente che il garbage collection si occupa di deallocare automaticamente i "cadaveri" del programma, funzione importante che prima svolgeva il programmatore.
Partiamo da alcuni concetti basilari: un oggetto diventa eleggibile per il garbage collection solamente quando risulta NON più "raggiungibile".
Il concetto di "raggiungibilità" è abbastanza semplice: se a partire da un insieme di "radici" (spiego più avanti) è possibile tracciare un cammino attraverso i reference che porti direttamente o indirettamente all'oggetto, allora si dice che quell'oggetto è raggiungibile. E NON può assolutamente essere toccato dal g.c.
Le radici di cui parlavo sono sostanzialmente (vado a memoria): tutte le variabili allocate sugli stack-frame in tutti gli stack (ogni thread ha il suo stack) PIU' tutte le variabili "di classe" (static) che ci sono nei vari tipi (classi, ecc...)
Queste sono, in linea generale, le radici da cui si parte. Se si può tracciare un cammino verso l'oggetto, è raggiungibile.
Attenzione, che "raggiungibile" è diverso dal "referenziato". Due oggetti potrebbero referenziarsi tra di loro e NON essere raggiungibili. I garbage collector "moderni" sono in grado di determinarlo e possono tranquillamente prendere e liberare la memoria di quei due oggetti.