首先我们来看下StackOverflowError要表达的意思是什么?Stack本身是栈的意思,而overflow指的是溢出,综合起来的StackOverflowError的意思就是栈溢出了。与之对应的是StackUnderflowError,StackOverflowError指的是上溢,那StackUnderflowError就是下溢了,很显然从堆栈的思想上来看,通常情况下是只是上溢。这言外之意就是说在java做某些运算或者说程序段的操作时,栈空间被用完了。所以有很多人程序员解释为内存不够。那为什么会内存不够呢?
实际上,如果程序里含有某些死循环或者是无限递归没有处理好时,可能会导致java的JVM虚拟机内存逐步的增大,大到一定限度没有得到合理的释放时,就出现了StackOverflowError。对于这种情况,解决的办法倒是很简单:可以在Eclipse的JDK配置中进行相应的配置,具体的配置代码是:-XX:MaxDirectMemorySize=64,将这里的64M修改为128或者更大等,接下来是采用debug单步调试的模式进行程序修复,F8单步跟踪,把程序的逻辑梳理清楚也可以解决问题。
所以这里可以归结为:死循环等程序导致StackOverflowError,解决方法就是增大JVM内存,同时debug模式下优化程序。
同时我们还提出以下建议:1、在撰写程序的时候,记住不要无限死循环或者是无穷递归,可以把某些递归代码尽量非递归化。
2、程序在定义变量的时候,注意局部变量不要过大。
3、设置编译器的配置时,尽量将配置的数据放大一点,如刚才所叙述的Eclipse JDK的虚拟内存配置参数等。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
