Недавно я прочитал отличную статью Дэна Гроссмана "1001 * Транзакционная память / аналог сборки мусора ". Одно предложение действительно привлекло мое внимание:
Теоретически сборка мусора может
улучшить производительность за счет увеличения
пространственная местность (из-за
перемещение объекта), но на практике мы
заплатить умеренную стоимость за
преимущества программной инженерии.
До этого мое чувство всегда было очень расплывчатым. Снова и снова вы видите заявления о том, что GC может быть более эффективным, поэтому я всегда держал это понятие в затылке. Однако после прочтения этого у меня начались серьезные сомнения.
В качестве эксперимента по измерению воздействия на языки GC некоторые люди взяли несколько программ на Java, отследили выполнение, а затем заменили сборку мусора на явное управление памятью. В соответствии с этим обзором статьи о Lambda, конечной , они обнаружили, что GC всегда медленнее. Проблемы с виртуальной памятью заставили GC выглядеть еще хуже, поскольку сборщик регулярно затрагивает гораздо больше страниц памяти, чем сама программа, и поэтому вызывает много перестановок.
Это все экспериментально для меня. Кто-нибудь, особенно в контексте C ++, выполнил всеобъемлющий тест производительности GC по сравнению с явным управлением памятью?
Особенно интересно было бы сравнить, как различные крупные проекты с открытым исходным кодом, например, работают с GC или без него. Кто-нибудь слышал о таких результатах раньше?
РЕДАКТИРОВАТЬ: И пожалуйста, обратите внимание на проблему производительности , а не на то, почему существует GC или почему это выгодно.
Приветствия
Карл
PS. Если вы уже вытаскиваете огнемет: я не пытаюсь дисквалифицировать GC, я просто пытаюсь получить окончательный ответ на вопрос о производительности.