Какое исключение возникает при переполнении стека вызовов в Java?

«Какое исключение возникает при переполнении стека вызовов в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При переполнении стека вызовов (stack) возникает ошибка StackOverflowError.

Причина: Каждый вызов метода выделяет в стеке кадр (frame) для локальных переменных, параметров и адреса возврата. При глубокой или бесконечной рекурсии эти кадры исчерпывают выделенную для стека память.

Типичный пример:

public class OverflowExample {
    public static void recursiveCall() {
        recursiveCall(); // Бесконечная рекурсия
    }
    public static void main(String[] args) {
        recursiveCall(); // Вызовет StackOverflowError
    }
}
Ключевые отличия от OutOfMemoryError: StackOverflowError OutOfMemoryError
Связан с областью памяти стек (stack). Связан с областью памяти куча (heap).
Возникает из-за слишком глубокой рекурсии. Возникает, когда JVM не может выделить память под новый объект.
Обычно указывает на логическую ошибку (бесконечный вызов). Часто указывает на проблему с настройками памяти или утечку.