示例
/**
* 栈溢出
* 栈帧过多,栈内存过小
* 每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧[1](Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息
* java.lang.StackOverflowError
* 输出:stack length:2110
*/
public class Demo2 {
private int stackLength = 1;
public void stackLeak() {
stackLength++;
stackLeak();
}
public static void main(String[] args) {
Demo2 oom = new Demo2();
try {
oom.stackLeak();
} catch (Throwable e) {
System.out.println("stack length:" + oom.stackLength);
throw e;
}
}
}
虚拟机参数
-Xss128k
解释:
结果
原因分析
此次异常,可以知道该线程在创建了2106个栈帧后再次创建栈帧时发生异常,原因是创建的栈帧的内存达到了最大值,无法申请新的内存,异常