java内存区域之虚拟机栈

  • 虚拟机栈描述的是java方法执行的动态内存模型
  • 栈帧
    • 每个方法执行,都会创建一个栈帧,伴随着方法从创建到执行完成。
    • 栈帧用于存储局部变量表,操作数栈,动态链接,方法出口
  • 局部变量表
    • 存放编译器可知的各种基本数据类型,引用类型,returnAddress类型
    • 局部变量表的内存空间在编译器完成分配,当进入一个方法时,这个方法需要在帧中分配多少内存是固定的,在方法运行期间是不会改变局部变量表的大小(为什么是固定的,因为栈中存的是对象的引用,而非对象本身)

 

压栈出栈图:和弹夹一样,先进后出,方法的调用亦是如此,结果一层一层往外返回

java内存区域之虚拟机栈

当栈的空间被占满了会怎么样?

利用递归调用方法,不断压栈来试一试

java内存区域之虚拟机栈

显然程序爆出了 StackOverflowError 栈内存溢出的异常