Certains (au moins Mono et .NET) collecteurs de déchets ont une zone de mémoire à court terme qu'ils analysent souvent et une zone de mémoire secondaire qu'ils analysent moins souvent. Mono appelle cela une pépinière.
Pour savoir quels objets peuvent être supprimés, ils analysent tous les objets à partir des racines, de la pile et des registres et éliminent tous les objets qui ne sont plus référencés.
Ma question est de savoir comment ils empêchent toute la mémoire en cours d'utilisation d'être analysée à chaque collecte? En principe, la seule façon de savoir quels objets ne sont plus utilisés est de scanner tous les objets et toutes leurs références. Cependant, cela empêcherait le système d'exploitation d'échanger de la mémoire même si elle n'est pas utilisée par l'application et semble être une énorme quantité de travail à faire, également pour "Collection Nursery". Il ne semble pas qu'ils gagnent beaucoup en utilisant une pépinière.
Suis-je en train de manquer quelque chose ou le ramasse-miettes analyse-t-il réellement chaque objet et chaque référence chaque fois qu'il effectue une collecte?