Alcuni garbage collector (almeno di Mono e di .NET) hanno un'area di memoria a breve termine che scansionano spesso e un'area di memoria secondaria che scansionano meno spesso. Mono chiama questo vivaio.
Per scoprire quali oggetti possono essere eliminati, eseguono la scansione di tutti gli oggetti a partire da root, stack e registri e dispongono di tutti gli oggetti a cui non si fa più riferimento.
La mia domanda è come impediscono la scansione di tutte le memorie in uso su ogni raccolta? In linea di principio, l'unico modo per scoprire quali oggetti non sono più in uso è scansionare tutti gli oggetti e tutti i loro riferimenti Tuttavia, ciò impedirebbe al sistema operativo di scambiare la memoria anche se non è in uso dall'applicazione e si sente come una grande quantità di lavoro che deve essere fatto, anche per "Raccolta Nursery". Non sembra che stiano vincendo molto usando un asilo nido.
Mi manca qualcosa o il garbage collector esegue effettivamente la scansione di ogni oggetto e ogni riferimento ogni volta che esegue una raccolta?