一般在递归的时候,递归层级过多,导致栈溢出。
可以设置-Xss进行栈空间调整
测试情况
-Xss300K => 可以递归2000次 -Xss1024K => 可以递归1W次 -Xss3000K => 可以递归3W次
因为-Xss设置的是栈大小,而且栈存放基础数据类型,当基础数据类型过多的时候也会影响栈深
没有基础类型变量时递归栈深9000+,添加之后变成6000+
public class RecursionMain {
static int i = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
aaa();
}
public static void aaa() {
long i1 = i; // 占栈空间
System.out.println(i++);
aaa();
System.out.println("----" + i1); // 防止回收
}
}
6338
6339
6340
6341
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.ext.DoubleByte$Encoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.PrintStream.write(Unknown Source)
at java.io.PrintStream.print(Unknown Source)