Sobes.tech
Junior
125
questionbank

Что такое сборщик мусора (Garbage Collector) в C#?

Answer from AI

sobes.tech AI

Сборщик мусора в C# — это часть среды выполнения .NET (CLR), которая автоматически управляет памятью, освобождая ресурсы, занимаемые более недоступными объектами.

Принципы работы:

  • Отслеживание объектов: Сборщик мусора отслеживает объекты, созданные в управляемой куче.
  • Определение достижимости: Он определяет, какие объекты достижимы для работающего кода (т. е. на них имеются действующие ссылки).
  • Сборка недостижимых объектов: Объекты, которые больше не достижимы, считаются "мусором" и могут быть безопасно удалены.

Процесс сборки мусора включает в себя:

  1. Пометка (Marking). GC сканирует стек и регистры, чтобы найти корни (корневые объекты). От корней он обходит граф объектов, помечая достижимые объекты.
  2. Сдвиг (Compacting). Позволяет уменьшить фрагментацию памяти. GC перемещает достижимые объекты в непрерывный блок памяти, оставляя свободное пространство.
  3. Освобождение (Sweeping). Недостижимые объекты (не помеченные) удаляются, а их память освобождается.

Основные особенности:

  • Автоматическое управление: Снимает с разработчика ручную ответственность за освобождение памяти.
  • Поколения (Generations): Куча разделена на поколения (Gen 0, Gen 1, Gen 2). Это оптимизирует сборку, так как большинство объектов становятся мусором быстро. Новые объекты создаются в Gen 0. Если объект выживает после сборки Gen 0, он перемещается в Gen 1, и так далее.
  • Финализаторы и выгрузка (Finalizers and Disposal): GC не гарантирует немедленное выполнение финализаторов для объектов, реализующих IDisposable. Для освобождения неуправляемых ресурсов следует использовать явный механизм освобождения (Dispose(), using statement).
// Пример использования using statement для явного освобождения ресурсов
using (var stream = new System.IO.FileStream("temp.txt", System.IO.FileMode.Create))
{
    // Работа с файлом
} // stream.Dispose() будет вызван автоматически