Если вы действительно интересуетесь тем, как работают сборщики мусора, могу ли я порекомендовать две книги Ричарда Джонса по сборке мусора. Ссылки / ссылки здесь . Это не касается сбора мусора в Java.
(у меня есть копия старой книги, а новая в моем списке покупок.)
Вот простая версия того, как копирующий сборщик решает эту проблему.
Копирующий коллектор работает путем копирования объектов из одного пространства (из-пространства) в другое (в-пространство).
В частности, GC просматривает график достижимых объектов в пространстве «from», начиная с каждого из корней GC. Каждый раз, когда он находит ссылку на узел (в поле экземпляра, статическом поле, стековом фрейме и т. Д.), Он проверяет объект, на который указывает ссылка, чтобы убедиться, что он помечен как посещенный.
Если он еще не отмечен, GC выполняет следующие действия:
- Он отмечает объект в космосе.
- Копирует объект в космос.
- Хранит адрес объекта в пространстве в объекте из космоса. (Это похоже на адрес пересылки.)
- Он рекурсивно посещает каждое поле ссылки космической копии объекта.
Результат этой ссылки на космический объект.
Если объект уже помечен, ГХ ищет адрес пересылки и возвращает его.
Местоположение (в пространстве или некотором корне GC), откуда GC получил ссылку, затем обновляется указателем на объект в пространстве.
Если вы выполните все это, то увидите, что GC не нужно искать все места, которые содержат ссылку на данный перемещенный объект. Вместо этого он просто встречает все места в обходе достижимых объектов. Конечно, GC должен выполнять этот обход, но существуют различные методы для уменьшения количества обходов, которые необходимо выполнить в каждом цикле GC.
Если вы не выполнили вышесказанное, ПОЖАЛУЙСТА, прочитайте один из рекомендованных мной учебников. Они объяснят это намного лучше, чем я. Вы также найдете материал о том, как другие виды GC справляются с этой проблемой.
Java HotSpot GC являются всеми копирующими сборщиками той или иной формы. Вещи становятся немного более сложными, чем мое описание выше для параллельного и параллельного сбора, но механизм «адреса пересылки» является общим для всех из них.
(Существует не так много опубликованных статей или другой общедоступной документации по ГХ HotSpot, и большая часть существующего материала предполагает, что читатель хорошо понимает, как работают современные сборщики мусора.)