Выбор ответа Junior JVM: память, GC, загрузка классов обновлено
StackOverflowError
Вопрос
Что чаще всего вызывает StackOverflowError?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Бесконечная или слишком глубокая рекурсия. Каждый вызов метода добавляет фрейм в стек потока, и при глубокой рекурсии стек (на 64-битном Linux по умолчанию 1 МБ, задаётся -Xss) заканчивается.
Варианты ответа
- Слишком много объектов в куче приложения
- Бесконечная или слишком глубокая рекурсияправильный ответ
- Большой массив в локальной переменной метода
- Слишком много одновременно запущенных потоков
Разбор
Каждый вызов метода добавляет фрейм в стек потока, и при глубокой рекурсии стек (на 64-битном Linux по умолчанию 1 МБ, задаётся -Xss) заканчивается. Нехватка кучи даёт OutOfMemoryError, массив создаётся в куче, а в стеке только ссылка. Слишком много потоков даёт OutOfMemoryError: unable to create native thread.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «JVM: память, GC, загрузка классов»
- Делегирование загрузчиков
- JVM в контейнере
- Сборщик по умолчанию
- Escape analysis
- Этапы загрузки класса
- GC roots
- Области памяти JVM
- Виды ссылок