C'è un algoritmo di raccolta dei dati non tutti sperimentali che soddisfa tutti i requisiti: semplice conteggio automatico. Nel complesso, il conteggio non ha abbastanza credito come opzione praticabile, ma in realtà funziona molto bene in molte situazioni, non ci sono mai ritardi di grandi ritardi e non c'è bisogno di complicate magie.
Una preoccupazione è ancora la pulizia di riferimenti circolari, che si può almeno lasciare fare molto raramente; Gli sviluppatori di app che si preoccupano della velocità possono interrompere esplicitamente i loop quando hanno bisogno che gli oggetti vadano via.
Una caratteristica poco apprezzata del refcounting è che è molto più dcache-friendly di altre forme di garbage collection.Se stai eseguendo un ciclo che alloca alcuni piccoli oggetti temporanei ogni volta attraverso il loop, un GC (o una gestione esplicita della memoria, ovviamente) può riutilizzare la stessa memoria ogni volta, evitando inutili svuotamenti della cache. Qualsiasi altro tipo di GC libererebbe periodicamente gli oggetti, determinando un ingombro di memoria molto più grande e quindi una lentezza.
Il conteggio non è molto efficiente per i sistemi a più thread multipli, perché è necessario acquisire blocchi ogni volta che si tocca il conto. Ma se stai progettando comunque un nuovo linguaggio, c'è una cosa enorme che puoi fare per migliorare le prestazioni e l'affidabilità in tutto il tuo linguaggio: impedire che quasi tutti gli oggetti vengano condivisi tra i thread. vale a dire. rendere la condivisione esplicita. Se lo fai, saprai quali oggetti sono contro e non sono condivisi, e quindi quali devono essere bloccati quando si incrementa/decrementa il conto e quale può essere lasciato sbloccato. Quando non c'è alcun blocco, le prestazioni del conteggio possono essere davvero eccellenti.
Se si destinati a .NET o piattaforma Java si otterrà uno gratuitamente. –
Ecco una serie di articoli ridicolmente buona (http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx) sulla raccolta dei rifiuti. – jason
@Henk, sta scrivendo un compilatore – ThomasMcLeod