栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来 存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型, 对象引用类型。

如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常,方 法递归调用产生这种结果。

如果Java虚拟机栈可以动态扩展,并且扩展的动作已经尝试过,但是无法申请到足够的内存去完成扩展,或者在新建立线程的时候没有足够的内存去创建对应的虚拟机栈,那么Java虚拟机 将抛出一个OutOfMemory 异常。(线程启动过多)。