Я везде искал и не могу найти надежный ответ. Согласно документации, Java выдает ошибку java.lang.StackOverflowError при следующих обстоятельствах:
Брошено, когда происходит переполнение стека, потому что приложение слишком сильно перегружается.
Но это вызывает два вопроса:
- Не существуют ли другие способы, а не только через рекурсию?
- Возникает ли StackOverflowError до того, как JVM фактически переполнит стек или после?
Чтобы уточнить второй вопрос:
Когда Java бросает StackOverflowError, можете ли вы спокойно предположить, что стек не записывался в кучу? Если вы уменьшите размер стека или кучи в попытке/уловить функцию, которая бросает переполнение стека, можете ли вы продолжить работу? Является ли это документированным где угодно?
Ответы, которые не ищу:
- StackOverflow происходит из-за плохой рекурсии.
- StackOverflow происходит, когда куча соответствует стеку.