Heap в Java: как отвечать на собесе, чтобы вас не забыли через минуту



Когда спрашивают про Heap, все обычно говорят одно и то же: «Это память для объектов, там есть Eden, Survivor и Old Gen».
Интервьюер кивает и забывает вас. Если хотите реально выделиться, добавьте вот эти три вещи — звучит просто, но показывает глубину.

1. TLAB (личный карман потока)

Мы думаем, что куча — это один общий склад. Но G1 делит её на куски — регионы. Чтобы потоки не толкались локтями при создании переменных, каждому дают свой личный маленький буфер (TLAB) внутри Eden.
Пока поток берет память из своего кармана — всё летает. Как только карман пустеет, поток обязан остановиться и попросить новый у сборщика мусора. На сотнях потоков эти микро-паузы складываются. Именно поэтому графики задержек иногда похожи на пилу, хотя процессор почти отдыхает.

2. Humongous Objects (ловушка гигантов)
Если мы создаем очень большой массив, например, `byte[]` на 50 мегабайт - это Humongous Object.
Проблема в том, что система вообще не знает, куда его деть по стандартной схеме. Он выделяется сразу в старую память и... остается там жить навсегда. Даже если он уже никому не нужен, стандартный быстрый мусорщик его не тронет. Он будет висеть мертвым грузом до тех пор, пока JVM не решит сделать тяжелую глобальную уборку (*Full GC*) и не остановит всё приложение.

3. Off-Heap (память вне Java)
Распространённая ошибка — верить мониторингу Java. Приложение может упасть от нехватки памяти, при этом мониторинги показывают заполнение Heap всего на 70%.
Причина — нативная память. Библиотеки вроде Netty или прямые буферы (`ByteBuffer.allocateDirect()`) едят оперативку напрямую мимо всех ваших флагов `-Xmx`. Классический дамп кучи (.hprof) тут бесполезен — он покажет идеальный порядок. Искать нужно инструментами ОС, потому что лимит исчерпан именно на уровне Linux.

Помимо Стека и Кучи, есть еще Метаспейс. Там лежат описания классов (раньше это был PermGen). Обычно о нем никто не думает, но если приложение на лету генерит много прокси-классов (как Spring), падает чаще всего именно он, а не Heap.
Просмотры: 102
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти