Сборщик мусора (Garbage Collector, GC) — это механизм автоматического управления памятью в .NET, который освобождает ресурсы, занимаемые неиспользуемыми объектами. Он избавляет разработчика от необходимости вручную освобождать память, как это делается, например, в языках вроде C++.
Выделение памяти:
Когда создается новый объект в C#, память для него выделяется в управляемой куче (managed heap). Управляемая куча — это область памяти, контролируемая CLR (Common Language Runtime).
var obj = new MyClass(); // Память выделяется в управляемой куче
Отслеживание ссылок:
GC отслеживает все ссылки на объекты в куче. Если на объект больше нет ссылок (ни из стека, ни из других активных объектов), он считается "мусором" и подлежит удалению.
Фазы сборки мусора:
GC работает в три этапа:
Поколения (Generations):
Для оптимизации GC использует три поколения объектов:
// Пример: можно узнать поколение объекта
int generation = GC.GetGeneration(obj);
Console.WriteLine($"Объект в поколении: {generation}");
Если объекты используют неуправляемые ресурсы (файлы, сетевые подключения), их нужно освобождать вручную, реализуя интерфейс IDisposable
и используя конструкцию using
:
using (var resource = new UnmanagedResource())
{
// работа с ресурсом
} // Dispose() вызовется автоматически
GC — это критически важный компонент .NET, который автоматически управляет памятью, освобождая разработчика от рутинных задач. Однако для эффективной работы с ресурсами важно понимать его принципы и ограничения.