Каковы недостатки ведения списка входящих ссылок в сборке мусора? - PullRequest
2 голосов
/ 23 апреля 2011

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

Каковы плюсыи минусы только поддержание списка всех входящих ссылок на объект?Используется ли это в алгоритмах сборки мусора?Если нет, то почему?

1 Ответ

1 голос
/ 23 апреля 2011

Стандартное копирование сборщиков мусора использует другую технику для обработки перемещений объектов. Поскольку он пересекает граф объектов и копирует объекты, в первый раз, когда он достигает объекта через некоторый указатель, он:

  1. Копирует объект на новый адрес (например, адрес A).
  2. Обновляет указатель.
  3. Отметьте исходный объект, чтобы сказать "перемещен по адресу A"

Теперь, каждый раз, когда GC достигает этого объекта через указатель, он будет видеть метку «перемещен в адрес A» и обновит указатель.

Адаптируя это к вашему варианту использования, я думаю, это будет означать, что объекты будут указывать на указатель реле. Если вы перемещаете реальный объект, обновите указатель реле новым адресом. С помощью этой техники каждый доступ к объекту имеет дополнительный шаг (для чтения объекта ретрансляции), и перемещение объекта равно O (1). Используется дополнительное пространство O (количество объектов).

При использовании метода входящих указателей у каждого доступа нет накладных расходов, и перемещение объекта равно O (входящие указатели). Используется дополнительный пробел O (количество указателей).

...