Questo è uno dei principali svantaggi del tradizionale reference counting garbage collection. La proprietà di un garbage collector che descrive questo comportamento è un raccoglitore incompleto. Altri collezionisti rientrano in gran parte in una categoria denominata tracciatori di immondizie, che comprendono gli ibridi tradizionali di marchiatura, semi-spazio/compattazione e generazionale e non soffrono di questi inconvenienti (ma ne affrontano molti altri).
Tutte le implementazioni di JVM e CLI Sono consapevole di uso collettori completi, il che significa che non soffrono il problema specifico che si sta chiedendo circa qui. A mia conoscenza, di quelli Jikes RVM è l'unico a fornire un collettore di conteggio di riferimento (uno dei suoi molti).
Un'altra cosa interessante da notare è che ci sono soluzioni al problema completezza in riferimento conteggio raccolta dei rifiuti, e l'resulting collectors dimostrano alcune proprietà interessanti prestazioni che sono difficili da ottenere su collettori tracciatura. Sfortunatamente, gli algoritmi di raccolta dei dati inutili con il conteggio delle prestazioni e le modifiche più complete dipendono dall'assistenza del compilatore, quindi portarli a C++ shared_ptr<T>
è difficile/non sta accadendo. Invece, abbiamo weak_ptr<T>
e documented rules (mi dispiace per il collegamento sub-ottimale - apparentemente la documentazione mi sfugge) semplicemente per evitare i problemi. Questo isn't the first time (altro link mediocre) che abbiamo visto questo approccio, e la speranza è il lavoro supplementare per evitare problemi di memoria è inferiore alla quantità di lavoro necessaria per mantenere il codice che non utilizza shared_ptr<T>
, ecc
Il i collegamenti mediocri sono perché gran parte del mio materiale di riferimento è sparsa nelle note della classe di gestione della memoria dell'ultimo semestre.
fonte
2009-08-03 19:53:23
In effetti, questo è uno dei problemi con gli ambienti di conteggio di riferimento che ** si occupa di ** nel .NET GC. –
Ancora un'altra caratteristica Lisp tradizionale che si fa strada negli ambienti tradizionali. –