Чи генератори сміттєзбірників породжені в кеш-пам'яті?


38

Типовий поколільний сміттєзбірник зберігає нещодавно виділені дані в окремій області пам’яті. У типових програмах багато даних недовговічні, тому збирання молодого сміття (незначний цикл GC) часто та збирання старого сміття нечасто є хорошим компромісом між накладними витратами на пам'ять та витраченим часом на GC.

Інтуїтивно зрозуміло, що користь від покоління сміттєзбірника порівняно з однорегіональним збирачем має зростати, оскільки коефіцієнт затримки основної пам’яті відносно кешу збільшується, тому що до даних у молодому регіоні часто звертаються та зберігаються всі на одному місці. Чи підтверджують експериментальні результати цю інтуїцію?


відповідна мета-дискусія про відповідні теги для запитання.
Каве

Відповіді:


19

Ось декілька робіт, які розповідають про наслідки, що стосуються кеш-накопичувачів сміття поколінь

З того, що я можу зібрати, головне питання полягає в тому, що системи, що збирають сміття, торгують простором у пам'яті, щоб уникнути переднього збирання. Те саме стосується кеш-пам'яті. Як ви запропонували, речі в першому поколінні, швидше за все, будуть сидіти в кеші, і тому їх розподіл і збір буде набагато швидшим, ніж щось в основній пам'яті, або передається на диск на диску. Основне питання - розмір першого покоління щодо розміру кешу. Якщо ваш кеш заповнюється до першого покоління, ви починаєте втрачати ці переваги, коли пропуски починають накопичуватися.


10

Є дуже складний аспект усіх сміттєзбірників, який може бути зафіксований у деяких описах, і це "повне сканування" або "повне збирання". Періодично, випадково, з перервами вони повинні сканувати всі об'єкти. колекціонерам поколінь краще відкласти повне сканування та мінімізувати його тривалість, але це все-таки потрібно.

Колекціонер поколінь зосередить увагу на тому, що іноді називають простором "дитячої", але в кінцевому підсумку / неминуче доведеться збирати на просторі "старшого" покоління, викликаючи повне сканування пам'яті.

Це повне сканування несумісне з майже всіма схемами кешування пам'яті та (особливо!) Віртуалізацією в тому сенсі, що майже всі схеми кешування / віртуалізації пам'яті будуть / повинні погано вийти з ладу при будь-якому поліпшенні продуктивності в цьому випадку.

Отже, ключовою відповіддю на це питання є те, як часто спрацьовує повне сканування, і наскільки "поганий" його ефект, коли це відбувається, і чи можна це допустити. це зводиться до більш властивості / питання, що залежить від програми.

Іншими словами, для "більшості" роботи колектора кеш, ймовірно, допоможе в цьому (кеш і "молодий" дитячий простір взагалі перекриються!), Але є періодичний, переривчастий, можливий, неминучий, важкий, можливо, навіть "масовий" [принизливий] сплеск продуктивності, коли простір "старого покоління" буде повністю зібраний і кеш "швидкість потрапляння" буде погіршуватися до дуже поганого, тому що багато предметів поза ним все зібрано в тісному циклі повним цикл сканування / збирання. Іншими словами, неминуча періодична розрив (де статистичні оцінки / середні показники / тенденції ефективності тощо) вводять в оману та не застосовуються).

Зараз з'являються нові системи колекціонування, які створені для з'єднання з базовими системами управління пам'яттю (кешування / віртуалізація). виявляється, що історичні підходи, які повністю відокремлюють окремі системи збору пам’яті, кешування і віртуалізації, не будуть працювати так само, як підходи, які поєднують / інтегрують / вирішують усі три аспекти разом.

Дивіться, наприклад, колекцію сміття, яку знають Чжоу та Демський.


Так ви могли стверджувати, що ГК покоління є кешовими у порівнянні з негенераційними (класичними)?
Рафаель

Я заперечую, що GC повинен бути розроблений інтегровано з кешами та віртуальною пам’яттю як частиною його дизайну, що є складним у існуючих архітектурах. однак розширити відповідь - так генератори колекцій генерації агрегують / консолідують / групують часто використовувані об'єкти в суміжну пам'ять, яка буде за своєю суттю більш сумісною з кешем, ніж інші конструкції, в яких часто і нечасто використовувані об'єкти розкидаються / змішуються (хоча останні все одно матиме певну користь від кешу).
vzn

1
Один дещо складний аспект об'єднання архітектури GC та кешування / віртуалізації полягає в тому, що такі архітектури, як правило, не піклуються про вміст сторінок пам'яті, але в системі GC вони вимагають. Різні мови іноді обіцяють програмістам різні функції, пов'язані з GC, і з'ясувати, які функції для підтримки на рівні ОС можуть бути складними. Найкращий підхід, ймовірно, повинен говорити про те, що кожен об'єкт повинен містити вказівник на структуру, початкові поля якої визначені ОС, але за якими можуть слідувати дані, характерні для мови, про які ОС не знала б і не піклувалася про них.
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.