Стандартное копирование сборщиков мусора использует другую технику для обработки перемещений объектов. Поскольку он пересекает граф объектов и копирует объекты, в первый раз, когда он достигает объекта через некоторый указатель, он:
- Копирует объект на новый адрес (например, адрес A).
- Обновляет указатель.
- Отметьте исходный объект, чтобы сказать "перемещен по адресу A"
Теперь, каждый раз, когда GC достигает этого объекта через указатель, он будет видеть метку «перемещен в адрес A» и обновит указатель.
Адаптируя это к вашему варианту использования, я думаю, это будет означать, что объекты будут указывать на указатель реле. Если вы перемещаете реальный объект, обновите указатель реле новым адресом. С помощью этой техники каждый доступ к объекту имеет дополнительный шаг (для чтения объекта ретрансляции), и перемещение объекта равно O (1). Используется дополнительное пространство O (количество объектов).
При использовании метода входящих указателей у каждого доступа нет накладных расходов, и перемещение объекта равно O (входящие указатели). Используется дополнительный пробел O (количество указателей).