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

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

3 ответа

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


В этой статье А. Хантера объясняется, что все это очень хорошо.

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

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

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

licensed under cc by-sa 3.0 with attribution.