TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.7K subscribers
Post #7151 3.42K
🤷‍♂️ Почему сборщик мусора делит объекты на поколения

GC в .NET не сканирует всю кучу при каждой сборке. Он опирается на простое наблюдение: большинство объектов живут очень недолго. Временные строки, локальные коллекции, промежуточные результаты вычислений часто умирают почти сразу после создания.

Поэтому управляемая куча разделена на поколения.

🟢 Gen0 — сюда попадают новые объекты. Сборка происходит часто и быстро.

🟢 Gen1 — промежуточное поколение для объектов, переживших сборку Gen0.

🟢 Gen2 — долгоживущие объекты: кеши, синглтоны, крупные структуры приложения. Проверяется значительно реже.


Такой подход позволяет GC большую часть времени работать только с небольшим количеством свежих объектов, не тратя ресурсы на всю кучу целиком.

🔜 Отдельно существует LOH (Large Object Heap). Туда попадают крупные объекты размером примерно от 85 КБ, чаще всего большие массивы. LOH обычно не уплотняется при обычных сборках, поэтому со временем может фрагментироваться.

Практический вывод:

✅ уменьшайте количество временных объектов на горячих путях;
✅ избегайте лишних аллокаций в циклах;
✅ переиспользуйте большие буферы через ArrayPool<T>, чтобы не нагружать LOH.

📚 Что почитать дальше:

«Фундаментальные основы сборщика мусора .NET» — один из лучших материалов для понимания поколений, LOH, режимов работы GC и причин пауз при сборке мусора.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#il_люминатор
  • 👍 13
  • ❤ 5
  • 🔥 3
More from @csharpproglib
  1. Sep 20, 2026💪 Разминка перед трудовыми буднями Что произойдёт? ❤️ — список станет [1, 3] 🔥 — Invalid…
  2. Sep 19, 2026🧩 Middleware в ASP.NET Core: 3 ловушки Middleware — звено HTTP pipeline: app.Use(async (c…
  3. Sep 18, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
  4. Sep 17, 2026🦆 Duck typing в C# — почти как в TypeScript В TypeScript достаточно, чтобы у объекта был…
  5. Sep 17, 2026🧠 Почему .NET-под съедает всю память? kubectl top pod показывает 1 ГБ, а managed heap зан…
  6. Sep 15, 2026🧑‍💻 Забытый await: от race condition до DoS-атаки В C# ключевое слово async — это инстру…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →