В чем разница между поколением и добавочной сборкой мусора? - PullRequest
24 голосов
/ 23 февраля 2011

Я думаю, что оба (генеративный и инкрементальный) - это разные подходы, чтобы сделать паузы сборки мусора быстрее. Но каковы различия между поколением и добавочным? Как они работают? И какой из них лучше для программного обеспечения реального времени / производит менее длинные паузы?

Кроме того, Boehm GC - это кто-нибудь из них?

Ответы [ 3 ]

21 голосов
/ 23 февраля 2011

Поколение GC всегда является инкрементным, поскольку оно не собирает все недоступные объекты в течение цикла.И наоборот, инкрементальный GC не обязательно использует схему генерации, чтобы решить, какие недоступные объекты собирать или нет.

Поколение GC делит недоступные объекты на разные наборы, примерно в соответствии с их последним использованием - их возрастом, поэтомуговорить.Основная теория заключается в том, что объекты, которые были созданы совсем недавно, быстро станут недоступными.Таким образом, набор с «молодыми» объектами собирается на ранней стадии.

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

Можно посмотреть на эту страницу википедии и далее вниз, чтобы получить больше информации об обоих методах GC.

Согласно веб-сайту Boehm, его GC является инкрементными поколение:

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

Что касается среды реального времени, существует несколько научных исследований, описывающих новые и оригинальные способыделать сборку мусора:

17 голосов
/ 23 февраля 2011

инкрементный сборщик мусора - это любой сборщик мусора, который может работать постепенно (это означает, что он может выполнять небольшую работу, затем дополнительную работу, затем дополнительную работу), вместо того, чтобы запускать весь Сбор без перерыва. Это контрастирует со старыми сборщиками мусора, которые останавливали мир, например, пометка и развертка без какого-либо другого кода, способного работать с объектами. Но должно быть ясно: работает ли инкрементный сборщик мусора параллельно с другим кодом, выполняющимся на тех же объектах, не важно, если он прерывается (для чего он должен, например, различать грязные и чистые объекты). ).

A поколения сборщик мусора различает старые, средние и новые объекты. Затем он может выполнить копирование GC на новые объекты (ключевое слово «Eden»), пометить и развернуть старые объекты и различные возможности (в зависимости от реализации) на средних объектах. В зависимости от реализации, способ выделения поколений объектов определяется областью, занятой в памяти, или флагами. Задача GC поколений - поддерживать в актуальном состоянии списки объектов, которые ссылаются от одного поколения к другому.

Boem - это инкрементальный GC, как указано здесь: http://en.wikipedia.org/wiki/Boehm_garbage_collector

3 голосов
/ 20 июня 2013

http://www.memorymanagement.org/glossary/i.html#incremental.garbage.collection

Некоторые алгоритмы трассировки мусора могут останавливаться в середине цикл сбора, пока мутатор продолжается, не заканчивая противоречивые данные. Такие коллекторы могут работать постепенно и являются подходит для использования в интерактивной системе.

Примитивные сборщики мусора (1), когда они начинают цикл сбора, должны либо завершить задание, либо отказаться от всей своей работы до сих пор. Это часто соответствующее ограничение, но недопустимо, когда система должны гарантировать время отклика; например, в системах с пользователем интерфейс и в режиме реального времени аппаратные системы управления. Такие системы может использовать инкрементную сборку мусора, чтобы время обработка и сборка мусора могут эффективно выполняться в параллельно, без лишних усилий.

http://www.memorymanagement.org/glossary/g.html#generational.garbage.collection

Поколение сбора мусора отслеживает сборку мусора, которая использует гипотезу поколений. Объекты собраны вместе в поколениях. Новые объекты выделяются в младшем или детское поколение, и продвигается к старшим поколениям, если они выживают. Объекты в старших поколениях осуждаются реже, экономя процессор время.

Обычно объект редко ссылается на более молодой объект. Следовательно, объекты в одном поколении обычно имеют мало ссылок на объекты в молодом поколении. Это означает, что сканирование старого поколений в процессе сбора младшего поколения могут быть сделано более эффективно с помощью запоминающихся наборов.

В некоторых чисто функциональных языках (то есть без обновления) все ссылки обращены назад во времени, и в этом случае запоминаемые наборы нет необходимости.

Boehm-Demers-Weiser имеет инкрементный режим, который вы можете включить, позвонив по номеру GC_enable_incremental. Смотри http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html

...