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