Введение

Алгоритм Чейни, впервые описанный в 1970 году в статье ACM Чейни, является методом «остановка и копирование» для трассировки сборки мусора в компьютерных программных системах. В этой схеме куча разделена на две равные половины, только одна из которых используется в любой момент времени. Сбор мусора выполняется путем копирования живых объектов из одного полупространства (исходного полупространства) в другое (целевое полупространство), которое затем становится новой кучей. Затем вся старая куча целиком отбрасывается. Это улучшение по сравнению с предыдущей техникой «остановка и копирование». Алгоритм Чейни восстанавливает элементы следующим образом: ссылки на объекты в стеке. Ссылки на объекты в стеке проверяются. Для каждой ссылки на объект, указывающей на объект в исходном полупространстве, выполняется одно из двух следующих действий: если объект еще не был перемещен в целевое полупространство, это делается путем создания идентичной копии в целевом полупространстве, а затем замены версии в исходном полупространстве переадресующим указателем на копию в целевом полупространстве. Затем обновляется ссылка на объект, чтобы она указывала на новую версию в целевом полупространстве. Если объект уже перемещен в целевое полупространство, просто обновляется ссылка с переадресующего указателя в исходном полупространстве. Объекты в целевом полупространстве. Сборщик мусора просматривает все ссылки на объекты в объектах, которые были перенесены в целевое полупространство, и выполняет одно из двух вышеуказанных действий для ссылаемых объектов. После того как все ссылки в целевом полупространстве проверены и обновлены, сбор мусора завершен. Алгоритму не требуется стек и только два указателя вне исходного и целевого полупространств: указатель на начало свободного пространства в целевом полупространстве и указатель на следующее слово в целевом полупространстве, которое необходимо исследовать. Данные между этими двумя указателями представляют собой оставшуюся работу (эти объекты считаются «серыми» в трехцветной терминологии, см. далее). Переадресующий указатель (иногда называемый «разбитым сердцем») используется только во время процесса сборки мусора; когда обнаруживается ссылка на объект, уже находящийся в целевом полупространстве (и, следовательно, имеющий переадресующий указатель в исходном полупространстве), ссылку можно быстро обновить, просто изменив ее указатель в соответствии с переадресующим указателем. Поскольку стратегия заключается в исчерпании всех живых ссылок, а затем всех ссылок в ссылаемых объектах, эта схема известна как схема копирования сборки мусора с обходом в ширину.

Полупространство

Чейни основал свою работу на сборщике мусора для полупространства, который был опубликован годом ранее Р. Р. Феничелем и Дж. К. Йохельсоном.

Эквивалентность трехцветной абстракции

Алгоритм Чейни — пример трехцветного маркировочного сборщика мусора. Первый элемент серого множества — это сам стек. Объекты, на которые есть ссылки в стеке, копируются в пространство to, которое содержит элементы черного и серого множеств. Алгоритм перемещает любые белые объекты (эквивалентные объектам в пространстве from без перенаправляющих указателей) в серое множество, копируя их в пространство to. Объекты, находящиеся между указателем сканирования и указателем свободного пространства в области пространства to, являются элементами серого множества, которые еще предстоит просканировать. Объекты ниже указателя сканирования принадлежат черному множеству. Объекты перемещаются в черное множество простым перемещением указателя сканирования над ними. Когда указатель сканирования достигает указателя свободного пространства, серое множество становится пустым, и алгоритм завершается.