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