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

慕仙森
TA贡献1827条经验 获得超8个赞
检查对方法的任何回溯调用。主要是在递归调用方法时引起的。一个简单的例子是
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时将被反复推入堆栈。

HUX布斯
TA贡献1876条经验 获得超6个赞
JVM的(可选)参数之一是堆栈大小。是-Xss。我不知道默认值是多少,但是如果堆栈中的所有东西的总数量超过该值,就会出现该错误。
通常,无限递归是造成这种情况的原因,但是如果您看到了这一点,则堆栈跟踪将包含5帧以上。
尝试添加-Xss参数(或增加其值)以查看是否消失。
添加回答
举报
0/150
提交
取消