Ответ
При переполнении стека вызовов (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 не может выделить память под новый объект. | |
| Обычно указывает на логическую ошибку (бесконечный вызов). | Часто указывает на проблему с настройками памяти или утечку. |