Алгоритм Чейни - Cheneys algorithm
Эта статья включает в себя список общих Рекомендации, но он остается в основном непроверенным, потому что ему не хватает соответствующих встроенные цитаты.Апрель 2014 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Алгоритм Чейни, впервые описанный в 1970 г. ACM статья К.Дж.Чейни, является остановить и скопировать метод отслеживание сборки мусора в компьютерных программных системах. На этой схеме куча делится на две равные половины, только одна из которых используется одновременно. Сборка мусора выполняется путем копирования живых объектов из одного полупространства (исходное пространство) в другое (пространство-в), которое затем становится новой кучей. Затем вся старая куча выбрасывается целиком. Это усовершенствование предыдущей техники остановки и копирования.[нужна цитата ]
Алгоритм Чейни восстанавливает предметы следующим образом:
- Ссылки на объекты в стеке. Проверяются ссылки на объекты в стеке. Одно из двух следующих действий выполняется для каждой ссылки на объект, которая указывает на объект из пространства:
- Если объект еще не был перемещен в пространство в пространство, это делается путем создания идентичной копии в пространстве в пространстве с последующей заменой версии из пространства указателем пересылки на копию в пространство. Затем обновите ссылку на объект, чтобы она ссылалась на новую версию в to-space.
- Если объект уже был перемещен в пространство, просто обновите ссылку из указателя пересылки в исходном пространстве.
- Объекты в космическом пространстве. Сборщик мусора проверяет все ссылки на объекты в объектах, которые были перенесены в космос, и выполняет одно из двух действий над объектами, на которые есть ссылка.
После того, как все ссылки на пространство были изучены и обновлены, сборка мусора завершена.
Алгоритму не нужен стек и только два указателя за пределами из-пространства и в-пространство: указатель на начало свободного пространства в пространстве-за и указатель на следующее слово в пространстве-за-пространство, которое необходимо проверить. . По этой причине его иногда называют «двухпальцевым» сборщиком - ему нужны только «два пальца», указывающие в пространство, чтобы отслеживать его состояние. Данные между двумя пальцами представляют собой работу, которую ему предстоит сделать.
Указатель пересылки (иногда называемый «разбитым сердцем») используется только во время процесса сборки мусора; когда найдена ссылка на объект, уже находящийся в to-space (таким образом, имеющий указатель пересылки в from-space), ссылку можно быстро обновить, просто обновив ее указатель для соответствия указателю пересылки.
Поскольку стратегия состоит в том, чтобы исчерпать все активные ссылки, а затем все ссылки в ссылочных объектах, это известно как в ширину список копирует схему сборки мусора.
Пример алгоритма
initialize () = tospace = N / 2 fromspace = 0 allocPtr = fromspace scanPtr = любой - используется только во время сбора
allocate (n) = Если allocPtr + n> fromspace + tospace collect () EndIf Если allocPtr + n> fromspace + tospace fail «недостаточно памяти» EndIf o = allocPtr allocPtr = allocPtr + n return o
collect () = swap (fromspace, tospace) allocPtr = tospace scanPtr = tospace - сканировать каждый корень, у вас есть ForEach root в стеке - или где-либо еще root = copy (root) EndForEach - сканировать объекты в to-space (включая объекты, добавленные этим циклом) Пока scanPtr copy (o) = Если o не имеет адреса пересылки o '= allocPtr allocPtr = allocPtr + size (o) скопировать содержимое o в o' адрес-пересылки (o) = o 'EndIf return-адрес-пересылка (o)Полупространство
Чейни основывал свою работу на полупространство сборщик мусора, опубликованный годом ранее Р. Р. Фенихелем и Дж. К. Йохельсоном.
Эквивалентность трехцветной абстракции
Алгоритм Чейни является примером трехцветная маркировка уборщик мусора. Первый член серого набора - это сам стек. Объекты, указанные в стеке, копируются в пространство, которое содержит элементы черного и серого наборов.
Алгоритм перемещает любые белые объекты (эквивалентные объектам в исходном пространстве без указателей пересылки) в серый набор, копируя их в пространство. Объекты, которые находятся между указателем сканирования и указателем свободного пространства в области перемещения, являются членами серого набора, которые еще предстоит сканировать. Объекты под указателем сканирования относятся к черному набору. Объекты перемещаются в черный набор простым наведением на них указателя сканирования.
Когда указатель сканирования достигает указателя свободного пространства, серый набор становится пустым, и алгоритм завершается.
Рекомендации
- Чейни, Си-Джей (ноябрь 1970 г.). «Нерекурсивный алгоритм сжатия списка». Коммуникации ACM. 13 (11): 677–678. Дои:10.1145/362790.362798.
- Fenichel, R.R .; Йохельсон, Джером К. (1969). «Сборщик мусора LISP для компьютерных систем с виртуальной памятью». Коммуникации ACM. 12 (11): 611–612. Дои:10.1145/363269.363280.
- Байерс, Рик (2007). «Алгоритмы сборки мусора» (PDF). Алгоритмы сборки мусора. 12 (11): 3–4.
- Руководство на Университет Мэриленда, Колледж-Парк