Как устроены поколения в сборке мусора
Garbage Collector (GC) в .NET работает по поколенческой (generational) модели и использует три поколения, нумеруемые от 0.
1️⃣ Gen 0 (Первое поколение)
• В этом поколении создаются новые объекты.
• Сборки происходят часто, но занимают мало времени.
• Если объект переживает сборку мусора, он перемещается в Gen 1.
Очистка происходит когда выделено определенное количество памяти или когда в системе недостаточно памяти.
2️⃣ Gen 1 (Второе поколение)
• Содержит объекты, которые выжили после очистки Gen 0.
• Используется как буфер перед Gen 2.
• Очистка Gen 1 происходит реже, чем Gen 0.
Очистка происходит когда Gen 0 заполняется, и GC не смог освободить достаточно памяти.
3️⃣ Gen 2 (Третье поколение)
• Включает долгоживущие объекты, например, кеш, синглтоны.
• Очистка происходит редко и занимает больше времени.
• Все объекты, пережившие сборку в Gen 1, перемещаются в Gen 2.
Очистка происходит, когда в системе не хватает памяти.
А также есть LOH (Large Object Heap) – специальная область для больших объектов. В нём очистка очень редкая и дорогостоящая.
Чем меньше объектов доживает до Gen 2, тем лучше работает GC.
🐸Библиотека шарписта #буст
Post #5697
6.22K

- 👍 12
- 🤔 2
- ❤ 1