实际导致堆栈溢出错误的原因是什么?
2022-08-31 05:44:58
我到处寻找,找不到一个可靠的答案。根据文档,Java 在以下情况下会抛出 java.lang.StackOverflowError 错误:
当堆栈溢出由于应用程序递归太深而发生时引发。
但这提出了两个问题:
- 难道没有其他方法可以发生堆栈溢出,而不仅仅是通过递归吗?
- StackOverflowError 是在 JVM 实际溢出堆栈之前还是之后发生的?
详细阐述第二个问题:
当Java抛出StackOverflowError时,你能安全地假设堆栈没有写入堆吗?如果您在引发堆栈溢出的函数的 try/catch 中缩小堆栈或堆的大小,是否可以继续工作?这在任何地方都有记录吗?
我不寻找的答案:
- 堆栈溢出的发生是由于递归不良。
- 堆栈溢出在堆与堆栈相遇时发生。