Что такое «в основном параллельный сборщик мусора»? - PullRequest
9 голосов
/ 23 июня 2011

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

Ответы [ 2 ]

7 голосов
/ 01 ноября 2011

Мне известны концепции сборщиков мусора реального времени, инкрементных, инкрементальных, параллельных, параллельных (мягких / жестких) в реальном времени.Но я не могу понять, главным образом, одновременный сборщик мусора.Это отличается от одновременного GC?Какая разница?Почему это называется в основном?

Как и многие другие предметы, сборка мусора окутана туманом терминологической неопределенности.Бем особенно печально известен тем, что использовал обычные термины нетрадиционными способами, но мы должны простить его, потому что он был пионером в области в то время, когда обычные значения еще не были окостеневшими!: -)

Насколько я понимаю, «остановка мира» относится к алгоритму, который приостанавливает все потоки мутатора на всю продолжительность цикла GC, например, при маркировке всей кучи.Например, .NET Server GC делает это и, как следствие, получает огромные 300 мс паузы.Инкрементальные GC выполняют небольшую часть основной работы GC в каждом вспомогательном цикле GC, например, "основные срезы" в GC OCaml.Параллельно означает, что GC использует несколько потоков для ускорения процесса сбора мусора.Параллельный сборщик мусора означает, что сборщик мусора запускается одновременно с мутаторами, например рабочая станция .NET GC.Реальное время трудно определить, изначально подразумевалось ограниченное максимальное время паузы, но теперь также означает минимальное использование мутатора (MMU), чтобы избежать патологической проблемы GC, который никогда не останавливает мутатор на долгое время, никогда не позволяя ему работать!Согласно новой книге Ричарда Джонса, сборщик мусора «на лету» никогда не приостанавливает более одного мутатора за раз (т. Е. Фазы остановки мира не существует), хотя я подозреваю, что он имел в виду, что мутаторы приостановлены независимо друг от друга.Наконец, GC в основном параллельный - это тот, который приостанавливает все потоки мутатора одновременно, но только на короткий период времени, а не на произвольно длинный цикл GC.Следовательно, мутаторам разрешено свободно работать большую часть времени, пока работает GC, и, следовательно, он называется «главным образом одновременным» GC.

Классификация «главным образом одновременного» важна, потому что большинство (все?) основные GC попадают в эту категорию, потому что это обеспечивает хороший компромисс между временем паузы и пропускной способностью.Например, рабочая станция .NET GC приостанавливает все потоки мутатора при создании моментального снимка глобальных корней, но возобновляет их во время маркировки и очистки.

2 голосов
/ 13 октября 2011

Доступное описание можно найти в статье «В основном параллельная сборка мусора» , подготовленной Богемом, Демерсом и Шенкером (Материалы конференции ACM SIGPLAN '91 по разработке и внедрению языков программирования, уведомления SIGPLAN 26, 6 (июнь 1991), стр. 157-164).

Они пишут:

Предположим, мы можем поддерживать набор виртуальных грязных битов, которые автоматически устанавливаются всякий раз, когдасоответствующие страницы виртуальной памяти записываются в.(Приемлемая реализация этой функции может быть получена путем защиты страниц от записи и перехвата возникающих ошибок записи без каких-либо изменений в базовом ядре ОС; реализация в ядре ОС, конечно, будет более эффективной.) Для любого определенного сборщика трассировкидля операции «останови мир» рассмотрим следующий алгоритм сбора.В начале коллекции удалите все виртуальные грязные биты.Выполните традиционную операцию трассировки параллельно с мутатором.Виртуальные грязные биты будут обновлены для отражения записей мутатора.После завершения трассировки остановите мир и отследите все отмеченные объекты, которые лежат на грязных страницах.(Регистры считаются грязными.) На этом этапе все достижимые объекты отмечены, и мусор можно безопасно утилизировать.

...

В этом алгоритме фаза параллельной трассировки обеспечивает приближениек истинно достижимому набору.Единственные объекты, не помеченные этим процессом параллельной трассировки, которые действительно достижимы, должны быть достижимы из помеченных объектов, которые были записаны с момента трассировки.Фаза трассировки «останови мир» отслеживает все такие объекты, так что в итоге никакие действительно достижимые объекты не остаются неотмеченными.

Когда они ссылаются на отслеживание сборщиков мусора , ониимеют в виду коллекторы, которые начинаются с обозначенных «корневых узлов» (обычно это регистры программы) и следуют указателям на каждый достижимый объект.Все недостижимое - мусор.

Короче говоря, в основном параллельный сборщик выполняет основную часть работы параллельно, а затем останавливает выполнение программы, чтобы исправить любые изменения, внесенные программой во время работы сборщика.Следовательно, оно «в основном параллельное».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...