睡了个午觉,继续开始学习JVM(《深入理解Java虚拟机》),这次本宝宝看到了关于Java虚拟机栈和本地方法栈中的一句话:如果现场请求的栈深度大于虚拟机允许的深度,将抛出StackOverflowError的异常。
好了,肯定猜到哪里我看不明白了吧。这都看不明白,你们看标题。
什么深度的,宝宝,看到这名字就怕屎了,以前自己学习数据结构总碰到什么树的深度,树的高度这类,所以总觉得这跟数据结构一样是个很高大上的东西。
查了查后,给我的感觉,其实这东西是这样的:
在JAVA 虚拟机中,每个方法在执行的同时都会创建一个栈帧,来储存一些方法相关的信息。当方法调用的时候它被压入虚拟机栈,方法结束出栈。
public class Stack{
public void createStack(){
createStack()
}
public static void main(String[] args)throws Throwable{
Stack stack = new Stack();
try{
stack.createStack();
}catch(Throwable t){
throw t;
}
}
在上面这段无限递归的方法中: 每一次调用createStack()方法都会往虚拟机栈中压入一个栈帧,因为是无限递归,所以就会一直往虚拟机栈中压栈,这样到某一个时候会栈深度大于虚拟机栈允许的深度。抛出StackOverflowError。