Reference counting

In informatica, il reference counting ("contatore dei riferimenti") è una tecnica di memorizzazione del numero di riferimenti, puntatori o handle a una risorsa come un oggetto o un blocco di memoria.

È tipicamente usato come metodo per deallocare oggetti che non sono più usati in modo automatico e sicuro.

Usi nel garbage collection

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 couting richiede di essere spesso aggiornato. Quando un 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 è troppo oneroso computazionalmente.

Interpretazione in teoria dei grafi

Quando si considerano gli schemi di garbage collection, è spesso utile pensare al grafo delle referenze, che è un grafo direzionato dove i vertici sono gli oggetti e c'è una connessione da un oggetto A ad uno B se A ha un riferimento a B. Si possono anche avere vertici speciali per rappresentare le variabili locali e le referenze bloccate dal sistema runtime, e nessuna connessione può raggiungere questi nodi sebbene da questi nodi possano partire link ad altri nodi.

In questo contesto, il semplice contatore di referenze di un oggetto è il numero delle sue connessioni.

Se un oggetto non può mai essere distrutto in questo tipo di grafi viene rappresentato da un nodo con un loop, cioè da un link a se stesso.