运行时栈帧结构
1.局部变量表
上的
在虚拟机使用
关于局部变量表,还有一点可能会对实际开发产生影响,就是局部变量不像前面介绍的类变量那样存在”准备阶段“。类变量有两次赋初始值的过程,一次在准备阶段,赋予系统初始值;另外一次在初始化阶段,赋予程序员定义的初始值。因此,即使在初始值阶段程序员没有为类变量赋值也没有关系,类变量仍然具有一个
操作数栈
动态连接
每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程的动态连接。Class
为动态连接。
方法返回地址
附加信息
方法调用
解析
分派
手段来获得更高的性能。
动态类型语言支持
基于栈上的字节码解释执行引擎
虚拟机是如何调用方法的内容已经讲解完毕,下面我们探讨虚拟机是如何执行方法中的字节码指令的。上文提到过,许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,那么在解释执行时,虚拟机执行引擎是如何工作的。
解释执行
基于栈的指令集与基于寄存器的指令集
基于栈的解释器执行过程