Давайте сначала узнаем что-то для поколений:
Поколение 0 . Это самое молодое поколение и содержит недолговечные объекты. Примером недолговечного объекта является временная переменная. Сборка мусора происходит чаще всего в этом поколении.
Вновь выделенные объекты формируют объекты нового поколения и неявно являются коллекциями поколения 0, если только они не являются большими объектами, в этом случае они помещаются в кучу больших объектов в коллекции поколения 2.
Большинство объектов возвращаются для сбора мусора в поколении 0 и не сохраняются до следующего поколения.
Поколение 1 . Это поколение содержит недолговечные объекты и служит буфером между недолговечными объектами и долгоживущими объектами.
Поколение 2 . Это поколение содержит долгоживущие объекты. Примером долгоживущего объекта является объект в серверном приложении, который содержит статические данные, действующие в течение всего процесса.
Объекты, которые не возвращаются в сборщик мусора, называются выжившими и переходят в следующее поколение. Объекты, которые переживают сборку мусора поколения 0, повышаются до поколения 1; объекты, которые переживают сборку мусора поколения 1, повышаются до поколения 2; и объекты, которые переживают сборку мусора поколения 2, остаются в поколении 2.
Когда сборщик мусора обнаруживает, что выживаемость высока в поколении, он увеличивает порог выделений для этого поколения, поэтому следующая коллекция получает значительный объем восстановленной памяти. CLR постоянно уравновешивает два приоритета: не допускать, чтобы рабочий набор приложения становился слишком большим, и чтобы сбор мусора занимал слишком много времени.
Размер эфемерного сегмента варьируется в зависимости от того, является ли система 32- или 64-битной, а также от типа сборщика мусора, на котором она работает. Значения по умолчанию показаны в следующей таблице.
32-bit 64-bit
Рабочая станция GC 16 МБ 256 МБ
Сервер GC 64 МБ 4 ГБ
Серверный ГХ с> 4 логическими процессорами 32 МБ 2 ГБ
Серверный ГХ с> 8 логическими процессорами 16 МБ 1 ГБ
Эфемерный сегмент может включать объекты поколения 2. Объекты поколения 2 могут использовать несколько сегментов (столько, сколько требуется вашему процессу и памяти).
Количество освобождаемой памяти из эфемерного мусора ограничено размером эфемерного сегмента. Объем свободной памяти пропорционален пространству, которое занимали мертвые объекты.
Ссылка: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals