Деякі (принаймні, Mono і .NET) сміттєзбірники мають короткочасну область пам’яті, яку вони сканують часто, і вторинну область пам’яті, яку вони сканують рідше. Моно називає це розсадником.
Щоб дізнатись, якими об’єктами можна утилізувати, вони сканують усі об'єкти, починаючи з коренів, стека та регістрів, і розміщують усі об'єкти, на які вже не посилаються.
Моє запитання полягає в тому, як вони запобігають скануванню всієї використаної пам'яті під час кожного збирання? В принципі, єдиний спосіб з'ясувати, які об'єкти вже не використовуються, - це сканувати всі об'єкти та всі їх посилання. Однак це не дозволить ОС замінити пам'ять, навіть якщо вона не використовується додатком і відчуває себе величезною роботою, яку потрібно виконати, також для "Nursery Collection". Не здається, що вони багато виграють, використовуючи дитячу.
Я щось пропускаю, чи збирач сміття насправді сканує кожен об’єкт і кожне посилання кожного разу, коли він збирає колекцію?