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

Реализация барьера памяти для сборщика мусора

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Итак, вы хотите найти барьеры для записи GC. В частности, Юаса, Стил и Дейкстра пишут барьеры.

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