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