java内存区域之虚拟机栈
- 虚拟机栈描述的是java方法执行的动态内存模型
-
栈帧
- 每个方法执行,都会创建一个栈帧,伴随着方法从创建到执行完成。
- 栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等
-
局部变量表
- 存放编译器可知的各种基本数据类型,引用类型,returnAddress类型
- 局部变量表的内存空间在编译器完成分配,当进入一个方法时,这个方法需要在帧中分配多少内存是固定的,在方法运行期间是不会改变局部变量表的大小(为什么是固定的,因为栈中存的是对象的引用,而非对象本身)
压栈出栈图:和弹夹一样,先进后出,方法的调用亦是如此,结果一层一层往外返回
当栈的空间被占满了会怎么样?
利用递归调用方法,不断压栈来试一试
显然程序爆出了 StackOverflowError 栈内存溢出的异常