Подтвердить что ты не робот

Какая разница между генерацией генерации и инкрементальным сбором мусора?

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

Кроме того, GC Boehm является любым из этих?

4b9b3361

Ответ 1

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

Генерация GC делит недостижимые объекты на разные наборы, примерно в соответствии с их последним использованием - их возраст, так сказать. Основная теория состоит в том, что объекты, созданные в последнее время, быстро становятся недоступными. Поэтому набор с "молодыми" объектами собирается на ранней стадии.

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

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

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

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

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

Ответ 2

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

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

Boem - это инкрементальная генерация GC, приведенная здесь: http://en.wikipedia.org/wiki/Boehm_garbage_collector

Ответ 3

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

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

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

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

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

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

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

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