运行时栈帧结构
- 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构, 他是虚拟机运行时数据区中的虚拟机栈的栈元素
- 在编译程序代码的时候, 栈帧中需要多大的局部变量表, 多深的操作数栈都已经完全确定了, 因此一个栈帧中需要分配多少内存, 不会受到程序运行期变量数据的影响, 而仅仅取决于具体的虚拟机实现
**
- 局部变量表
局部变量表是一组变量值存储空间, 用于存放方法参数和方法内部定义的局部变量
- 操作数栈
操作数栈也被成为操作栈, 它是一个后入先出栈
- 动态连接
每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用, 持有这个引用是为了支持方法调用过程中的动态连接.
- 方法返回地址
- 附加信息
方法调用
- 解析
在类加载的解析阶段, 将符号引用转化为直接引用, 这要求方法的调用版本在运行期不可变
符合要求的有: 静态方法, 私有方法, 被final修饰的方法, 这些称为非虚方法
- 分派
静态分派-方法重载
动态分派-方法重写