Jump to content

Алгоритм Чейни

(Перенаправлено из алгоритма Чейни )

Алгоритм Чейни , впервые описанный в статье ACM 1970 года Си Джей Чейни, представляет собой метод остановки и копирования для отслеживания сборки мусора в компьютерных программных системах. В этой схеме куча разделена на две равные половины, из которых в любой момент времени используется только одна. Сбор мусора осуществляется путем копирования живых объектов из одного полупространства (из-пространства) в другое (в-пространство), которое затем становится новой кучей. Вся старая куча затем выбрасывается одним куском. Это усовершенствование предыдущего метода остановки и копирования. [ нужна ссылка ]

Алгоритм Чейни возвращает элементы следующим образом:

  • Ссылки на объекты в стеке. Ссылки на объекты в стеке проверяются. Для каждой ссылки на объект, указывающей на объект из космоса, выполняется одно из двух следующих действий:
    • Если объект еще не был перемещен в пространство, это делается путем создания идентичной копии в пространстве и последующей замены версии из пространства указателем пересылки на копию в пространстве. Затем обновите ссылку на объект, чтобы она ссылалась на новую версию в пространстве.
    • Если объект уже был перемещен в пространство, просто обновите ссылку из указателя пересылки в пространство из пространства.
  • Объекты в пространстве. Сборщик мусора проверяет все ссылки на объекты в объектах, которые были перенесены в to-space , и выполняет одно из двух вышеуказанных действий над объектами, на которые ссылаются.

После того как все ссылки на пространство проверены и обновлены, сбор мусора завершается.

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

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

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

Пример алгоритма

[ редактировать ]
initialize() =
    tospace   = N/2
    fromspace = 0
    allocPtr  = fromspace
    scanPtr   = whatever -- only used during collection
allocate(n) =
    If allocPtr + n > fromspace + N/2
        collect()
    EndIf
    If allocPtr + n > fromspace + N/2
        fail “insufficient memory”
    EndIf
    o = allocPtr
    allocPtr = allocPtr + n
    return o
collect() =
    swap(fromspace, tospace)
    allocPtr = fromspace
    scanPtr = fromspace

    -- scan every root you've got
    ForEach root in the stack -- or elsewhere
        root = copy(root)
    EndForEach
    
    -- scan objects in the to-space (including objects added by this loop)
    While scanPtr < allocPtr
        ForEach reference r from o (pointed to by scanPtr)
            r = copy(r)
        EndForEach
        scanPtr = scanPtr + o.size() -- points to the next object in the to-space, if any
    EndWhile
copy(o) =
    If o has no forwarding address
        o' = allocPtr
        allocPtr = allocPtr + size(o)
        copy the contents of o to o'
        forwarding-address(o) = o'
    EndIf
    return forwarding-address(o)

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

[ редактировать ]

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

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

[ редактировать ]

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

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

Когда указатель сканирования достигает указателя свободного пространства, серый набор становится пустым и алгоритм завершается.

  • Чейни, CJ (ноябрь 1970 г.). «Нерекурсивный алгоритм сжатия списка» . Коммуникации АКМ . 13 (11): 677–678. дои : 10.1145/362790.362798 . S2CID   36538112 .
  • Фенихель, Р.Р.; Йохельсон, Джером К. (1969). «Сборщик мусора LISP для компьютерных систем с виртуальной памятью» . Коммуникации АКМ . 12 (11): 611–612. дои : 10.1145/363269.363280 . S2CID   36616954 .
  • Байерс, Рик (2007). «Алгоритмы сборки мусора» (PDF) . Алгоритмы сборки мусора . 12 (11): 3–4.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 19e1e6a9075d1e85ec07216b2e153293__1699395000
URL1:https://arc.ask3.ru/arc/aa/19/93/19e1e6a9075d1e85ec07216b2e153293.html
Заголовок, (Title) документа по адресу, URL1:
Cheney's algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)