1、什么是虚拟机栈
Java虚拟机栈是Java运行时区域的一部分,描述的是Java线程的内存模型,每个Java方法被执行的时候,虚拟机都会创建一个栈帧(stack frame),用于存储方法执行需要的数据,比如局部变量表、操作数栈、动态链接、方法出口。在方法被调用的时候这个栈帧就会在虚拟机栈中入栈,方法结束的时候,在虚拟机栈中出栈。
2、虚拟机栈特点
- 线程私有的
- 生命周期与线程相同
- 存在StackOverFlowError与OutOfMomoryError。
需要注意的是,在《Java虚拟机规范》中,栈的异常有两种情况:
1、当栈的深度超过最大限度时,会抛出StackOverflowError异常
2、当Java虚拟机栈空间可以动态扩展,且扩展时申请不到更多的内存空间时,会抛出OutOfMomoryError异常。
而HotSport虚拟机是不支持栈空间动态扩展的,所以是不会出现由于无法扩展导致的OutOfMomoryError异常,只要线程申请栈空间成功了就不会有OOM,但是申请失败了,依旧会出现OOM。
参考《深入理解Java虚拟机》第三版 ——周志明