Реализация барьера памяти для сборщика мусора - PullRequest
13 голосов
/ 15 марта 2011

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

Так, например, если помеченный (черный) объект изменен мутатором для указания на немаркированный (белый) объект, то белый объект должен быть помечен серым (помечен как живой, но еще не отсканированный).

Но я не могу найти какой-либо детали того, как это можно реализовать: как я могу обнаружить, когда черный объект изменяется, и выполнить действие в этот момент?

Ответы [ 2 ]

14 голосов
/ 15 марта 2011

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

Чтобы сохранить триколор-инвариант, на который вы ссылаетесь, сборщик проверяет цвет объекта, прежде чем записать его.В этом случае барьер записи может выполнить какое-либо действие, когда собирается заменить черный объект на серый.

См. Обзор http://www.memorymanagement.org/glossary/s.html#strong.tri-color.invariant и эту статью для более подробной информации.

10 голосов
/ 16 июня 2011

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

Я думаю, вы путаете барьеры записи и барьеры памяти. Сборщики мусора используют барьеры записи для отслеживания меняющейся топологии кучи. Барьер памяти - это низкоуровневый примитив параллелизма, который предотвращает переупорядочение операций с памятью как компилятором, так и самим процессором.

Итак, вы хотите найти барьеры записи GC. В частности, Yuasa, Steele и Dijkstra пишут барьеры.

Сборщики мусора могут также обрабатывать мутации топологии кучи на лету, используя барьеры чтения.

...