小记:java.lang.StackOverflowError(堆栈溢出错误)

首先我们需要明白java产生堆栈溢出的原因然后再来思考我们遇到的问题。

错误场景如下

在这里插入图片描述

解决思路

堆栈内存溢出的原因无非分为两种

  • 系统的空间确实不够
  • 我们的程序出现了死循环(例如一直递归的调用自己)

很快的排除了第一种情况,因为自己的这个项目纯粹练手,未涉及太多的内存消耗,那么围绕着第二种情况展开思考。观察错误,不难发现系统总是在初始化Orders和Munu,难道是死循环的创建了???
在这里插入图片描述

带着疑问我们开始检查项目源码,找到对应得这俩家伙初始化的地方
在这里插入图片描述
在这里插入图片描述

哇,你中创建我,我中创建你,生生不息,你中有我,我中有你!!!虽然很美好,但这就是问题的源头,于是一刀将其二人斩断,问题卒。

总结

当线程请求的栈深度大于虚拟机允许的深度,也就是当前线程请求方法太多,导致栈溢出,一般情况下只有死循环调用方法才会达到这种深度。解决的时候可以先尝试Eclipse中JDK的默认给的空间进行调整,Eclipse内存调整(修改JDK使用内存)排出第一种纯粹的内存空间不足。其次再是检查项目,估计程序里面有死循环,类似递归没有写结束什么的。

猜你喜欢

转载自blog.csdn.net/weixin_41935702/article/details/100174232
今日推荐