public class Test {
public static void main(String[] args) {
new Test().stackOverFlowTest();
}
public void stackOverFlowTest(){
stackOverFlowTest();
}
}
stack overflow异常发生的原因大多是进程空间中的栈不够用。
如果一个线程在计算时所需要用到栈大小 > 配置允许最大的栈大小,那么Java虚拟机将抛出StackOverflowError
windows默认栈大小是1M,使用的栈超过了这个范围就会包stack overflow异常。
产生原因可以归结为两类:
- 错误。程序中出现了不该出现的死循环,例如递归函数没有出口,这种情况,不管栈空间有多大,早晚要溢出的。这类错误,通过debug,比较容易查找。
- 确实栈不够使用。保存到栈上的主要内容是:局部变量和函数调用的函数环境(包括函数参数等)。