Параллельная сборка мусора Eiffel

Может ли кто-нибудь объяснить, как в eiffel реализована параллельная сборка мусора? Я обнаружил подробности, касающиеся сборки мусора для последовательных программ: - очистка генерации - отметка и очистка - сжатие памяти

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


person gabriele colia    schedule 03.07.2018    source источник


Ответы (1)


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

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

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

person Alexander Kogtenkov    schedule 17.08.2018