Получить доступ

Из каких основных областей состоит память JVM и что где хранится?

JuniorJVM и сборка мусора
Ещё спрашивают так:
  • Что такое Metaspace?
Коротко

Куча (heap) — все объекты и массивы, общая для потоков, её чистит GC. Стек — у каждого потока свой: кадры вызовов с локальными переменными и ссылками. Metaspace — метаданные классов, в нативной памяти вне кучи.

  • Размеры: куча -Xms/-Xmx, стек -Xss, Metaspace -XX:MaxMetaspaceSize
  • Ещё вне кучи: кодовый кэш JIT, direct-буферы, стеки потоков, структуры GC
  • Ошибки: OutOfMemoryError: Java heap space / Metaspace, StackOverflowError

А ещё PermGen заменён Metaspace в Java 8

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

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

GC: Eden, Survivor и продвижение

Подробно

Куча. Здесь живут все объекты, созданные через new, и массивы. Общая для всех потоков. Делится на поколения (молодое: Eden и Survivor; старое) или на регионы (G1, ZGC). Именно её обходит сборщик мусора.

Стек потока. Каждый вызов метода кладёт кадр: локальные переменные (примитивы — значением, объекты — ссылкой), аргументы, промежуточные значения. Метод вернулся — кадр снят, сборка мусора не нужна. Глубокая рекурсия переполняет стек — StackOverflowError.

Metaspace (Java 8+) — описания классов: поля, методы, байт-код, константный пул. Лежит в нативной памяти и по умолчанию растёт без ограничения. Утечка загрузчиков классов (передеплой в сервере приложений, динамически генерируемые классы) приводит к OutOfMemoryError: Metaspace. До Java 8 это была PermGen внутри кучи фиксированного размера.

Прочее вне кучи: кодовый кэш (скомпилированный JIT машинный код), direct ByteBuffer, структуры сборщика, стеки всех потоков. Поэтому процесс Java всегда занимает больше, чем -Xmx — важно в контейнерах.

Статические поля хранятся в объекте Class, то есть в куче, — частая путаница.

Что хотят услышать

  • Назначение кучи, стека, Metaspace.
  • Что общее, а что своё у потока.
  • Какие ошибки бывают у каждой области.
  • Память процесса больше -Xmx.

Частые ошибки

  • Считать, что статические поля лежат в Metaspace.
  • Путать Metaspace и PermGen.

Что спросят дальше

  • Что такое поколения в куче?
  • Где живут статические поля?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем