Выбор ответа Middle GC, IDisposable и производительность обновлено
Куча больших объектов
Вопрос
Что происходит с массивом new byte[100_000] в .NET?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Он попадает в LOH, которая собирается с поколением 2 и не уплотняется. Объекты от 85 000 байт размещаются в LOH.
Варианты ответа
- Он размещается на стеке, так как это массив байтов фиксированного размера
- Он попадает в поколение 0, как любой новый объект, и уплотняется
- Он сразу финализируется после выхода из метода, где был создан
- Он попадает в LOH, которая собирается с поколением 2 и не уплотняетсяправильный ответ
Разбор
Объекты от 85 000 байт размещаются в LOH. Она логически относится к поколению 2 и собирается только при полной сборке, а уплотнение по умолчанию выключено (можно включить разово через GCSettings.LargeObjectHeapCompactionMode). Частые большие временные буферы бьют по GC, поэтому их берут из ArrayPool<T>. На стеке такой массив не окажется, в поколение 0 тоже.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.