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