*怎么解决
- 栈溢出的可能原因:
- 函数递归调用层次过深 ,每调用一次,函数的参数、局部变量等信息就压一次栈,并且没有及时出栈。
- 局部变量体积太大
-
分析:每一个 JVM 线程都拥有一个私有的 JVM 线程栈,用于存放当前线程的 JVM 栈帧(包括被调用函数的参数、局部变量和返回地址等)。
-
如果某个线程的线程栈空间被耗尽,没有足够资源分配给新创建的栈帧,就会抛出 java.lang.*Error 错误。
-
解决方案:
1.把递归调用函数改用while或者for循环来实现 。
2.通过尾递归优化。
3.改用堆内存,函数里定义很大的局部变量(例如大数组),这种情况可以将局部变量改为静态变量(实质上也是全局变量)。
4.增大栈的大小值。