Reference counting: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Aggiunto i vantaggi e gli svantaggi dell'algoritmo
Riga 9:
Il reference counting è spesso noto come un algoritmo di [[garbage collection]] dove ciascun oggetto contiene un contatore del numeri di riferimenti tenuti da altri oggetti. Se il contatore dei riferimenti di un oggetto raggiunge lo zero, l'oggetto diviene inaccessibile e viene messo nella lista degli oggetti da distruggere.
 
Un semplice reference counting richiede di essere spesso aggiornato. Quando un [[Riferimento (informatica)|riferimento]] viene distrutto o riscritto, il contatore dei riferimenti viene decrementato, mentre quando un riferimento viene creato o copiato, il contatore dei riferimenti viene incrementato.
 
Il reference counting è anche usato nelle operazioni sui sistemi operativi su disco o distribuiti, dove un completo garbage collection che traccia i riferimenti in un [[grafo]] o in un [[Albero (informatica)|albero]] è troppo oneroso computazionalmente.
 
== Vantaggi e svantaggi ==
I '''vantaggi''' del reference counting sono che è molto più veloce di qualsiasi altro algoritmo di garbage collection.
 
Lo '''svantaggio''' principale è che bisogna mantenere e gestire un contatore per ogni oggetto che è continuamente aggiornato.
 
L'algoritmo presenta il problema dei riferimenti circolari:
 
Si considerino due oggetti (A e B) che puntano l'uno all'altro.
 
Sia '''A''' che '''B''' hanno due riferimenti:
 
* Quello della variabile che li contiene (diretto)
* Quello dell'oggetto che punta a loro (indiretto)
 
Quando uno dei due oggetti esce dal suo scope, non è più accessibile tramite la sua variabile e la sua memoria non può essere liberata, dal momento che un altro oggetto la sta referenziando (rischio di [[Dangling pointer|dangling reference]]) mentre l'effetto esterno è quello di un [[memory leak]].
 
La soluzione è utilizzare algoritmi di [[:en:Cycle_detection|cycle-detecting]] con adozione di riferimenti deboli. I riferimenti circolari sono esplicitamente marcati come deboli e non considerati dal reference counting.
 
==Interpretazione in teoria dei grafi==