Per quanto ricordo, i collettori di copie dovrebbero essere di facile consultazione, poiché la traccia copiando tende a migliorare la localizzazione dei riferimenti dei puntatori. Ciò ha un effetto positivo sul programma (mutatore) che causerà meno errori di pagina quando segue i collegamenti e migliorerà anche il ciclo di raccolta successivo poiché la traccia causerà anche meno errori di pagina. L'agenda di tracciamento (quali puntatori dovrebbero essere elaborati per primi) può avere un impatto sull'efficacia per migliorare la localizzazione dei dati. Ciò può essere migliorato misurando le statistiche sul numero di accesso a diversi puntatori in diversi tipi di celle.
Ora, se consideri un raccoglitore di tracce in generale, di solito devi mantenere una struttura che tenga traccia dei puntatori che non sono ancora stati tracciati. Potrebbe essere possibile organizzare questa struttura in modo che tutti i puntatori in attesa che puntano nella stessa pagina vengano mantenuti insieme (sebbene ciò possa richiedere più spazio, in alcuni casi, a seconda delle tecniche disponibili per mantenere l'elenco di tali puntatori). Una possibile politica è quindi di rintracciare sempre prima il più grande insieme di puntatori in attesa che puntano alla stessa pagina, quando non è rimasto alcun puntatore in attesa sulle pagine in memoria.
Per quanto riguarda la domanda del terzo paragrafo, che è stata aggiunta dopo che ho risposto, la raccolta di copie è di nuovo una risposta. Il sistema operativo può ridurre il numero di pagine fisiche allocate al momento della raccolta, poiché le pagine sono completamente liberate. Con un mark and sweep collector, l'evento di una pagina intera che si libera è probabilmente molto più raro, quindi non merita un macanismo specifico da prendere in considerazione.
Questo tipo di idee è naturale ed è probabilmente descritto in alcuni articoli. Ma non me lo ricordo di mano. Penso che i primi articoli su Lisp GC contengano alcune di queste idee (come: auto o cdr dovrebbero essere seguite per prime?).
La buona notizia in questo ruolo della raccolta di copie è anche che il paging è facile da copiare, poiché aumenta lo spazio di archiviazione disponibile. Ricordiamo che, in linea di principio, il raccoglitore di copie richiede il doppio dello spazio utilizzato per l'archiviazione effettiva dei dati. Ora, l'effetto del paging dipende anche dallo spazio degli indirizzi della macchina e dalla memoria fisica disponibile. Nei computer più vecchi, la memoria fisica era molto inferiore allo spazio degli indirizzi disponibile, quindi il paging era davvero un bonus di spazio, consentendo politiche come copiare GC. Anche quando lo spazio fisico è grande quanto lo spazio degli indirizzi, si potrebbe desiderare di condividerlo, in modo che il processo che utilizza un GC abbia meno spazio di indirizzamento senza paginazione (vedere paging). Queste osservazioni sono in qualche modo sostituite dall'uso di collezionisti generazionali. Generalmente usano la raccolta di copie per le giovani generazioni proprio per queste qualità e perché le giovani generazioni hanno una vita breve.
Quindi hai tutte le interazioni del GC generazionale con il sistema di cache, che è stato discusso in una domanda precedente: i garbage collector generazionali sono intrinsecamente compatibili con la cache?
Per ulteriori informazioni su questo problema, vorrei cercare nel web con, ad esempio, le parole chiave garbage collection e località .