GC запускается при превышении бюджета выделений, нехватке памяти или явном GC.Collect(). Он находит достижимые объекты, освобождает недостижимые и при необходимости уплотняет память.
Что является триггером сборки мусора в .NET и какие этапы она включает?
GC запускается при превышении бюджета выделений, нехватке памяти или явном GC.Collect(). Он находит достижимые объекты, освобождает недостижимые и при необходимости уплотняет память.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
GC запускается при превышении бюджета выделений, нехватке памяти или явном GC.Collect(). Он находит достижимые объекты, освобождает недостижимые и при необходимости уплотняет память.
Основные этапы: обход корней и маркировка живых объектов, определение нового размещения и исправление ссылок, освобождение памяти и перемещение выживших объектов при уплотнении.
Сборка выбранного поколения включает младшие поколения. Не каждая сборка затрагивает всю кучу и не каждый сегмент обязательно уплотняется. Финализаторы выполняются отдельно; наличие финализатора может задержать освобождение объекта. GC.Collect обычно не нужен в прикладной логике: частые принудительные сборки могут ухудшить производительность.
Источник: learn.microsoft.com.