是什么原因导致java.lang.StackOverflowError

2022-08-31 10:04:38

什么会导致 ?我得到的堆栈打印输出根本不是很深的(只有5种方法)。java.lang.StackOverflowError


答案 1

检查是否有任何对方法的回避调用。主要是在对方法进行递归调用时引起的。一个简单的例子是

public static void main(String... args) {
    Main main = new Main();

    main.testMethod(1);
}

public void testMethod(int i) {
    testMethod(i);

    System.out.println(i);
}

这里是 System.out.println(i);当调用 testMethod 时,将被反复推送到堆栈。


答案 2

JVM 的一个(可选)参数是堆栈大小。它是-Xss。我不知道默认值是什么,但是如果堆栈上的东西总数超过该值,你会得到这个错误。

通常,无限递归是导致这种情况的原因,但是如果您看到这种情况,则堆栈跟踪将有超过5帧。

尝试添加一个 -Xss 参数(或增加一个参数的值),看看这是否会消失。