Стоимость перемещения сборщика мусора - PullRequest
9 голосов
/ 26 сентября 2010

Движущиеся сборщики мусора, такие как сборщики поколений, несут дополнительный сгенерированный код для хранения и перезагрузки ссылок через безопасные точки GC.Кто-нибудь количественно оценил стоимость производительности этих издержек по сравнению с неподвижным коллектором?

Я спрашиваю, потому что меня интересует разработка коллектора, который может эффективно перерабатывать краткосрочные значения без необходимости их перемещения.

1 Ответ

6 голосов
/ 15 октября 2010

Компромисс между движением и без движения является сложным. Я не знаю каких-либо конкретных исследований того аспекта, который вы упомянули - на самом деле, я не уверен, что полностью его понимаю: точный GC всегда должен знать, где находятся все указатели, поэтому, возможно, вы говорите о консервативный неподвижный GC? Консервативный сборщик мусора, на мой взгляд, плохой выбор, если у вас достаточно контроля над путем компиляции, чтобы иметь возможность делать точный сборщик мусора.

Другие аспекты, влияющие на производительность движущегося и неподвижного ГХ:

  • Скорость выделения. Неподвижный GC, возможно, придется выделить из свободного списка, в то время как Coing GC может использовать выделение указателя удара. Гибридные схемы, такие как Immix , пытаются найти лучший компромисс между ними.

  • Локальность и поведение кэша. Существует множество исследований по этому вопросу как для подвижного, так и для неподвижного ГХ; см. Библиография GC . Вообще говоря, сжатие хорошо для кеша, хотя копирование GC, как правило, занимает первое место, что является плохим выбором (шаблоны доступа имеют тенденцию быть в первую очередь глубиной), поэтому существует множество исследований в этой области, пытающихся упорядочить объекты, чтобы соответствовать шаблону доступа .

Мое личное мнение заключается в том, что для поддержки действительно быстрого выделения вам понадобится питомник размером L2 с копированием коллекции и выделением ударных указателей. Если вы делаете что-то еще, распределение становится более дорогим, что искажает многие вещи: оптимизация для сокращения распределения становится более важной, так что вы в конечном итоге затрачиваете усилия и усложняете ситуацию. Я бы предпочел сделать распределение действительно очень дешевым, а потом не беспокоиться об этом.

...