关于栈深度

来源:互联网 发布:puppy linux吧 编辑:程序博客网 时间:2024/06/06 12:37

睡了个午觉,继续开始学习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。

0 0