Выбор ответа Middle GC, IDisposable и производительность обновлено

Куча больших объектов

Вопрос

Что происходит с массивом new byte[100_000] в .NET?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Он попадает в LOH, которая собирается с поколением 2 и не уплотняется. Объекты от 85 000 байт размещаются в LOH.

Варианты ответа

  1. Он размещается на стеке, так как это массив байтов фиксированного размера
  2. Он попадает в поколение 0, как любой новый объект, и уплотняется
  3. Он сразу финализируется после выхода из метода, где был создан
  4. Он попадает в LOH, которая собирается с поколением 2 и не уплотняетсяправильный ответ

Разбор

Объекты от 85 000 байт размещаются в LOH. Она логически относится к поколению 2 и собирается только при полной сборке, а уплотнение по умолчанию выключено (можно включить разово через GCSettings.LargeObjectHeapCompactionMode). Частые большие временные буферы бьют по GC, поэтому их берут из ArrayPool<T>. На стеке такой массив не окажется, в поколение 0 тоже.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.