Ответ
Время жизни объектов в Generation 0 крайне мало — обычно от миллисекунд до нескольких секунд. Generation 0 предназначено для кратковременных объектов.
Как это работает:
- Все новые объекты размещаются в Generation 0 (если они не являются большими объектами, которые попадают в Large Object Heap).
- Размер Generation 0 ограничен (обычно порядка нескольких мегабайт). Когда он заполняется, автоматически запускается сборка мусора (GC) только для Generation 0.
- Объекты, пережившие эту сборку, продвигаются (promoted) в Generation 1.
Практический пример:
void ProcessRequest()
{
// Этот объект создается в Generation 0.
var requestModel = new RequestData { Id = Guid.NewGuid(), Timestamp = DateTime.UtcNow };
// ... какая-то быстрая обработка ...
// Если здесь, до завершения метода, сработает GC Gen 0,
// и на requestModel больше нет ссылок, он будет удален.
} // После выхода из метода ссылка `requestModel` теряется, объект станет кандидатом на удаление.
Ключевые моменты:
- Сборка мусора для Generation 0 происходит наиболее часто, так как она быстрая и затрагивает небольшую область памяти.
- Цель такого подхода — по принципу «разделяй и властвуй» быстро очищать память от кратковременных объектов (например, созданных внутри метода), не трогая долгоживущие объекты в старших поколениях.
- Частые аллокации в Gen 0 и последующие сборки мусора — нормальный рабочий процесс для .NET приложений.