Эйфелева параллельная сборка мусора - PullRequest
0 голосов
/ 03 июля 2018

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

По-другому ли Eiffel обрабатывает параллельную (используя SCOOP) сборку мусора? Используя SCOOP, куча делится на регионы для каждого отдельного объекта. Каковы критерии для освобождения конкретного объекта?

1 Ответ

0 голосов
/ 17 августа 2018

Основное отличие сборщика мусора с поддержкой SCOOP от обычного состоит в том, что он удаляет не только объекты, но и освобождает процессоры / регионы SCOOP. Живые объекты отслеживаются, начиная с корневых наборов, которые включают в себя объекты, достижимые из стеков вызовов, и по завершении работы функции. Первые (стеки вызовов) являются безусловными, то есть всегда включаются в корневые наборы, потому что соответствующие объекты участвуют в некоторых вычислениях. Вторые (после результатов функции) являются условными, потому что их следует учитывать только тогда, когда соответствующий процессор / область также достижимы. В результате GC должен отслеживать как живые объекты, так и живые процессоры / регионы.

Когда процессор / регион становится недоступным, связанный поток и ресурсы должны быть освобождены. Поэтому сборщик мусора освобождает не только память, но и вычислительную мощность. Учитывая, что живые объекты и живые процессоры / области являются взаимозависимыми, алгоритм вычисляет фиксированную точку для живых объектов и живых процессоров / регионов. Это отличается от традиционного GC, который вычисляет фиксированную точку только для живых объектов. После этого вычисления GC с поддержкой SCOOP восстанавливает мертвые объекты и мертвые процессоры. Подробное описание алгоритма с некоторыми тестами можно найти в статье «Процессоры и их набор» .

Что касается сборки мусора объектов, то реализация в EiffelStudio в настоящее время использует упомянутый вами алгоритм: очистка поколений, разметка и очистка, сжатие памяти с традиционной адаптацией к многопоточности, когда записи в уже обработанные объекты записываются и учитываются ГК.

...