原因

原因1:递归导致死循环或者无限循环调用,多个实体类之间有多对一、多对多 关系时,重写toString方法的时候一定要注意,不要两个有对应关系的实体类都重写相关联属性字段的toString方法,这样会导致一直递归重写下去,内存当然会被耗尽,导致栈溢出

  • 造成我查你你查我,循环往复,就形成了递归,进而引起stackoverflow。
  • 细致的检查报错信息,找出行号的重复模式。这些重复的行号代表了被递归调用的代码。仔细审查代码,理解为何递归不终止。

原因2:栈的大小有点下导致,修改-Xss参数,这个参数可以在项目配置或命令行指定

  • 确认递归实现没有问题,再去修改-Xss参数

我的错误原因是原因1,我首先是增加的-Xss参数,后来发现还是报错,后来仔细检查,才知道是产生了死循环,所以,大家一定要检查仔细了

复现

public class StackOverflowErrorExample {public static void main(String args[]) {a();}public static void a() {a();}}

a() 方法将无限入栈,直至栈溢出,耗尽线程栈空间,异常信息如下

Exception in thread "main" java.lang.StackOverflowErrorat StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)at StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)at StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)at StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)at StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)at StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)at StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)at StackOverflowErrorExample.a(StackOverflowErrorExample.java:6)

查看博客1:https://cloud.tencent.com/developer/article/1503192
参考博客2:https://www.jianshu.com/p/e4e224b87aa3