Выбор ответа Junior JVM: память, GC, загрузка классов обновлено

StackOverflowError

Вопрос

Что чаще всего вызывает StackOverflowError?

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

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

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

Коротко

Правильный ответ: Бесконечная или слишком глубокая рекурсия. Каждый вызов метода добавляет фрейм в стек потока, и при глубокой рекурсии стек (на 64-битном Linux по умолчанию 1 МБ, задаётся -Xss) заканчивается.

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

  1. Слишком много объектов в куче приложения
  2. Бесконечная или слишком глубокая рекурсияправильный ответ
  3. Большой массив в локальной переменной метода
  4. Слишком много одновременно запущенных потоков

Разбор

Каждый вызов метода добавляет фрейм в стек потока, и при глубокой рекурсии стек (на 64-битном Linux по умолчанию 1 МБ, задаётся -Xss) заканчивается. Нехватка кучи даёт OutOfMemoryError, массив создаётся в куче, а в стеке только ссылка. Слишком много потоков даёт OutOfMemoryError: unable to create native thread.

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

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

Термины по теме