Alcuni (almeno i Mono e .NET) i garbage collector hanno un'area di memoria a breve termine che scansionano spesso e un'area di memoria secondaria che scansionano meno spesso. Mono chiama questo un asilo nido.
Per scoprire quali oggetti possono essere eliminati, scansionano tutti gli oggetti a partire da root, stack e registri e dispongono di tutti gli oggetti a cui non viene più fatto riferimento.
La mia domanda è: come impediscono a tutti i ricordi della memoria in uso di essere scansionati ad 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 memoria anche se non è in uso dall'applicazione e sembra una grande quantità di lavoro che deve essere fatto, anche per "Nursery Collection". Non sembra che stiano vincendo molto usando un asilo nido.
Mi sto perdendo qualcosa o il Garbage Collector sta effettivamente scansionando ogni oggetto e ogni riferimento ogni volta che fa una raccolta?