Как сборщик мусора определяет, является ли объект мусором? - PullRequest
3 голосов
/ 22 марта 2010

Как сборщик мусора определяет, является ли объект мусором? Он ссылается на стек, чтобы проверить ссылки на пространство, выделенное в куче?

Ответы [ 3 ]

4 голосов
/ 22 марта 2010

Используется метка и алгоритм развертки . Упрощенная версия: начинается с рассмотрения всех объектов, которые могут быть собраны. Затем он ищет корни для объектов. Любой корневой объект затем помечается как используемый. После этого все оставшиеся объекты считаются мусором. Джеффри Рихтер предлагает отличное описание деталей в CLR via C # .

3 голосов
/ 22 марта 2010

Эта статья А. Хантера объясняет все это довольно хорошо.

Короче говоря, GC следует ссылкам, чтобы найти все недоступные объекты. Объект ссылается на другой объект, если он или любой из его суперклассов содержит поле с другим объектом.

Для этого GC отслеживает четыре типа корневых объектов, называемых GC root . Самый распространенный тип корня - это все переменные, созданные в стеке (как вы уже догадались). Другие корневые типы - это статика, связанные с взаимодействием и объекты с методом финализатора.

Так что да, GC ссылается на стек в большинстве случаев.

0 голосов
/ 22 марта 2010

Я бы порекомендовал вам прочесть некоторую литературу по этому поводу: Теория и практика Java: сборка мусора и производительность и Основы и советы по сборщику мусора .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...