Як я пам’ятаю, колекціонери копій повинні бути друкованими, тому що відстеження копіювання має на меті покращити локальність посилань на покажчики. Це позитивно впливає на програму (мутатор), яка спричинить менше помилок сторінки при переході посилань, а також покращить наступний цикл колекції, оскільки трасування також спричинить менше помилок сторінки. Порядок денний відстеження (які покажчики слід опрацювати спочатку) може вплинути на ефективність для покращення локальності даних. Це може бути покращено за допомогою статистичних даних щодо кількості доступу до різних покажчиків у різних типах комірок.
Тепер, якщо ви вважаєте колектор трасування в цілому, вам зазвичай потрібно підтримувати структуру, яка відслідковує покажчики, які ще не були простежені. Можливо, можна організувати цю структуру так, що всі вказівники очікування, що вказують на одну й ту саму сторінку, будуть зберігатися разом (хоча це може зайняти більше місця, в деяких випадках залежно від доступних методик збереження списку таких покажчиків). Тоді можлива політика полягає у тому, щоб завжди простежувати спочатку найбільший набір покажчиків очікування, що вказують на ту саму сторінку, коли в пам'яті не залишається вказівник очікування.
Щодо питання в третьому пункті, яке було додане після того, як я відповів, колекція копій - це знову відповідь. ОС може зменшити кількість виділених фізичних сторінок під час збирання, оскільки сторінки повністю звільнені. З колекціонером відміток і розгортки, подія виходу на повну сторінку безкоштовно, мабуть, рідше, тому не варто враховувати конкретний маханізм.
Цей вид ідей природний і, ймовірно, описаний в деяких роботах. Але я не пам'ятаю це з рук. Я думаю, що ранні статті про Lisp GC містять деякі з цих ідей (наприклад: чи слід спочатку дотримуватися автомобіля чи компакт-диска?).
Хороша новина в цій ролі колекціонування копій також полягає в тому, що пейджинги дружать для копіювання колекції, оскільки це збільшує доступний простір для зберігання. Нагадаємо, що для збирання копій потрібно в принципі вдвічі більше місця, ніж використовується для фактичного зберігання даних. Тепер ефект підкачки залежить також від адресного простору машини та фізичної пам’яті. У старшому комп’ютері фізична пам’ять була набагато меншою, ніж доступний адресний простір, так що пейджингова підтримка була дійсно космічним бонусом, дозволяючи проводити такі політики, як копіювання GC. Навіть коли фізичний простір є таким же великим, як і адресний простір, можна поділитися ним, щоб процес, що використовує GC, мав менше адресного простору без підкачки (див. Підказка). Ці зауваження дещо витісняють використання колекцій поколінь. Вони, як правило, використовують колекцію копій для молодого покоління саме завдяки цим якостям і тому, що молоде покоління в основному недовговічне.
Тоді ви маєте всі взаємодії генераційних GC із системою кешу, про які йшлося в попередньому запитанні: Чи генератори збирачів сміття породжені кешами?
Для отримання додаткової інформації з цього питання я б шукав в Інтернеті, наприклад, за ключовими словами збирання сміття та місцеположення .