Algunos recolectores de basura (al menos Mono y .NET) tienen un área de memoria a corto plazo que escanean con frecuencia y un área de memoria secundaria que escanean con menos frecuencia. Mono llama a esto una guardería.
Para averiguar qué objetos se pueden eliminar, escanean todos los objetos a partir de las raíces, la pila y los registros, y eliminan todos los objetos a los que ya no se hace referencia.
Mi pregunta es cómo evitan que se escanee toda la memoria en uso en cada recopilación. En principio, la única forma de averiguar qué objetos ya no se usan es escanear todos los objetos y todas sus referencias. Sin embargo, esto evitaría que el sistema operativo intercambie memoria a pesar de que la aplicación no lo utiliza y se siente como una gran cantidad de trabajo que debe hacerse, también para "Nursery Collection". No parece que estén ganando mucho al usar una guardería.
¿Me estoy perdiendo algo o el recolector de basura realmente escanea cada objeto y cada referencia cada vez que hace una recolección?