Этап 7 из 11 · ≈ 6 ч

Память JVM

Основа с Middle

Куча, стек, метаспейс, устройство объекта, память Java в контейнере.

Что важно знать

  • Куча — объекты; стек — кадры вызовов потока; метаспейс — метаданные классов.
  • Объект: заголовок, поля, выравнивание.
  • В контейнере память процесса больше кучи — кучу задают долей от лимита.
  • OutOfMemoryError бывает разных видов: куча, метаспейс, потоки.

Критерии освоения

Middle ≈ 6 ч

  • Объясняет области памяти JVM и что хранится в каждой
  • Настраивает размер кучи для контейнера через MaxRAMPercentage
  • Снимает и анализирует дамп кучи при утечке

Практика. Создать утечку памяти в учебном сервисе, снять heap dump и найти причину в Eclipse MAT или VisualVM.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Java-приложение запускают в контейнере с лимитом памяти. Как правильно задать размер кучи?Middle

Задавать кучу долей от лимита: -XX:MaxRAMPercentage=70–75, оставляя запас на память вне кучи (Metaspace, стеки, кодовый кэш, direct-буферы, GC). -Xmx, равный лимиту, приводит к OOMKilled без OutOfMemoryError в логах.

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

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

Полный разбор
Что верно про стек и кучу в JVM?Middle

Стек — у каждого потока свой (-Xss): кадры вызовов, локальные примитивы значением и ссылки. Куча — общая (-Xmx): сами объекты. Переполнение стека — StackOverflowError, нехватка кучи — OutOfMemoryError.

Полный разбор
Почему увеличение кучи с 30 ГБ до 33 ГБ может уменьшить объём фактически доступной памяти?Senior

Около 32 ГБ отключаются compressed oops: ссылки занимают 8 байт вместо 4. В приложениях с множеством мелких объектов полезного места становится меньше, чем было на 30 ГБ.

Полный разбор
Где размещаются объекты, создаваемые оператором new?Junior

Объекты — в куче, общей для всех потоков; в стеке потока — кадры вызовов с локальными переменными, в том числе ссылками на объекты.

Полный разбор
Чем слабая ссылка (WeakReference) отличается от обычной?Junior

Слабая ссылка позволяет обратиться к объекту, но не удерживает его от сборки: если обычных ссылок нет, объект соберут.

Полный разбор

Разборы темы

← Вся карта «Java»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования