运行时栈帧结构

  • 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构, 他是虚拟机运行时数据区中的虚拟机栈的栈元素
  • 在编译程序代码的时候, 栈帧中需要多大的局部变量表, 多深的操作数栈都已经完全确定了, 因此一个栈帧中需要分配多少内存, 不会受到程序运行期变量数据的影响, 而仅仅取决于具体的虚拟机实现

image.png
**

  • 局部变量表

局部变量表是一组变量值存储空间, 用于存放方法参数和方法内部定义的局部变量

  • 操作数栈

操作数栈也被成为操作栈, 它是一个后入先出栈

  • 动态连接

每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用, 持有这个引用是为了支持方法调用过程中的动态连接.

  • 方法返回地址
  • 附加信息

方法调用

  • 解析

在类加载的解析阶段, 将符号引用转化为直接引用, 这要求方法的调用版本在运行期不可变
符合要求的有: 静态方法, 私有方法, 被final修饰的方法, 这些称为非虚方法

  • 分派

静态分派-方法重载
动态分派-方法重写