
4.3.
Удаление сущностей, на которые нет ссылок 265
к однопроцессорной трассировке представлен сборщиками типа «помечай и под-
метай». Эти сборщики работают в два приема.
В ходе фазы пометки сущности отслеживаются по существующим цепочкам
ссылок, исходящим из сущностей корневого набора. Каждая сущность, которая
может быть достигнута оттуда, помечается, например, путем записи сущности
в отдельную таблицу. Фаза подметания состоит из тщательной проверки памяти
для локализации «ничейных» сущностей. Эти сущности считаются мусором, ко-
торый должен быть удален.
Другой вариант работы сборщиков «помечай и подметай»
—
трехцветная по-
метка сущностей, Изнача.71ьно каждая сущность, которую следует проверить, ок-
рашена в белый цвет. К концу фазы пометки все сущности, доступные из корня,
помечаются черным, а недоступные остаются белыми. Серый цвет используется
для индикации хода фазы пометки. Сущность помечается серым, если она дос-
тупна, но ссылки, которые содержит эта сущность, еще нуждаются в проверке.
Когда все сущности, на которые ссылается данная сущность, окрашиваются се-
рым, сама она становится черной.
Распределенный вариант схемы «помечай и подметай» был реализована в сис-
теме Emerald, описанной в
[220].
В Emerald каждый процесс запускает локаль-
ный сборщик мусора, причем все сборщики работают параллельно. Сборщики
окрашивают заместители, скелетоны и сами объекты. Изначально все они поме-
чаются белым цветом. Когда объект, расположенный в адресном пространстве
процесса Р, доступен из корневого набора, объект помечается серым. При этом
все заместители, содержащиеся в этом объекте, также помечаются серым. Помет-
ка заместителя серым цветом означает, что его локальный сборщик мусора ука-
зывает на необходимость проверки ссылок данного удаленного объекта ассоции-
рованным с ним локальным сборщиком мусора.
Когда заместитель помечается серым, ассоциированному с заместителем ске-
летону посылается сообщение, маркирующее серым и его. Объект, к которому
относится скелетон, помечается серым вслед за своим скелетоном. Далее, рекур-
сивно, все заместители в этом объекте помечаются серым. В этот момент скеле-
тон и ассоциированный с ним объект помечаются черным, и соответствующее
сообщение посылается всем ассоциированным с ним заместителям. Отметим, что
хотя в этом подходе скелетону известны связанные с ним заместители, это не оз-
начает, что они достижимы из скелетона. Логически рассуждая, пара (замести-
тель,
скелетон)
—
это исключительно однонаправленная связь от заместителя
к
скелетону.
Когда заместитель получает сообщение о том, что ассоциированный с ним
скелетон стал черным, он тоже помечается черным. Другими словами, локаль-
ный сборщик мусора теперь знает, что удаленный объект, на который идет ссыл-
ка через заместитель, признан доступным.
Когда все локальные сборщики мусора заканчивают фазу пометки, каждый
из них по отдельности собирает все белые объекты, считая их мусором. Фаза по-
метки завершается, когда все объекты, скелетоны и заместители приобретут ли-
бо белый, либо черный цвет. Удаление белых объектов означает также удаление
ассоциированных с ними скелетонов, а также заместителей этих объектов.