Некоторые (по крайней мере, Mono и .NET) сборщики мусора имеют область кратковременной памяти, которую они часто сканируют, и область вторичной памяти, которую они сканируют реже. Моно называет это детской.
Чтобы выяснить, какие объекты могут быть удалены, они сканируют все объекты, начиная с корней, стека и регистров, и удаляют все объекты, на которые больше нет ссылок.
Мой вопрос: как они предотвращают сканирование всей используемой памяти при каждом сборе? В принципе, единственный способ выяснить, какие объекты больше не используются, - это просмотреть все объекты и все их ссылки. Однако это предотвратит замену памяти операционной системой, даже если она не используется приложением и выглядит как огромный объем работы, которую необходимо выполнить, в том числе для «Коллекции питомников». Не похоже, что они много выигрывают, используя детскую.
Я что-то упускаю или сборщик мусора сканирует каждый объект и каждую ссылку каждый раз, когда выполняет сборку?