Сколько куч существует в CLR? Большинство ответили неправильно, поэтому велком🥰
Этот вопрос в той или иной формулировке с вероятностью 80% прозвучит на собеседовании, где спрашивают теорию.
Давайте разбираться.
Изначально их было две — Small Object Heap (SOH) и Large Object Heap (LOH).
SOH — это та самая дефолтная куча, где 3 поколения, там чаще других отрабатывает GC и двигает объекты туда-сюда.
LOH нужна для больших объектов, которые занимают более 85 тысяч байт, а в старых версиях дотнета и массивы типа double более 1000 элементов попадали туда же.
Зачем она нужна? Всё достаточно просто — большие объекты затратно перемещать по куче, поэтому фазу сжатия GC для этого поколения пропускает, да и такие объекты проверять часто тоже не надо, поэтому в LOH сборка мусора происходит только во время сборки мусора во втором (третьем по счёту) поколении SOH.
Этот ответ устроит большинство интервьюеров, но если хотите показать, насколько вам нечего делать, изучая кишки гарбейдж коллектора, то 🐒:
Pinned Object Heap (POH) — появилась в 5-ом дотнете и в ней хранятся объекты, адрес которых не должен меняться.
Никогда не пинил объекты и не особо хочу знать, зачем оно надо. Говорят, что как-то связано с неуправляемым кодом 🤔
Frozen Object Heap (FOH) — совсем новая и модная оптимизация, которая появилась в 8-ом дотнете. Тут располагаются объекты, которые живут всё время жизни приложения, не изменяются после создания и не ссылаются на объекты не из FOH.
Благодаря ей мы лишний раз не проверяем объекты, которые точно никогда не удаляются, что уменьшает накладные расходы на сборку мусора.
Что? Техника 🌟. Тут надо тыщу реакций собрать иначе дальше только кружочки
Post #245
2.6K
Папочка Разработки Не удивляйтесь. Ответьте и я подумаю писать ли про техничку 🥰 Сколько куч существует в CLR?
- 👍 54
- ❤ 4
- 😁 1