第八章 虚拟机字节码执行引擎
8.1 意义
不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果
8.2 运行时栈帧结构
-
栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息
以Java程序的角度来看,同一时刻、同一条线程里面,在调用堆栈的所有方法都同时处于执行状态。而对于执行引擎来讲在活动线程中,只有位于栈顶的方法才是在运行的,只有位于栈顶的栈帧才是生效的,其被称为“当前栈帧”(Current Stack Frame),与这个栈帧所关联的方法被称为“当前方法”(Current Method)
- 编译Java程序源码的时候,栈帧中需要多大的局部变量表,需要多深的操作数栈就已经被分析计算出来,也就是一个栈帧需要分配多少内存,并不会受到程序运行期变量数据的影响,而仅仅取决于程序源码和具体的虚拟机实现的栈内存布局形式
8.2.1 局部变量表
- 存放方法参数和方法内部定义的局部变量,编译时就确定了该方法局部变量表的最大容量。
- 变量槽(Slot)为最小单位,一个变量槽可以存放一个32位以内的数据类型,对于64位的数