练习内容:java.lang.StackOverflowError
问题出现:不断递归调用,导致栈溢出。如果程序过多调用,或递归频繁,需调整。
代码:代码出自《深入理解java虚拟机》
public class VMStackSOF {
public static int stackLength = 0;
public static void main(String[] args) throws Throwable{
VMStackSOF sof = new VMStackSOF();
try {
sof.stackLeak();
}catch(Throwable e){
System.out.println("stack length"+sof.stackLength );
throw e;
}
}
private void stackLeak() {
while(true) {
stackLength++;
stackLeak();
}
}
}
日志:
stack length22203
Exception in thread "main" java.lang.StackOverflowError
at jvm.VMStackSOF.stackLeak(VMStackSOF.java:20)
at jvm.VMStackSOF.stackLeak(VMStackSOF.java:20)
调整,1.8版:参数:-Xss2m
/*
- 栈溢出。默认 22203
- -Xss4m:100638
- -Xss2m:58291
*/