数据结构论坛

首页 » 分类 » 问答 » 虚拟机字节码执行引擎
TUhjnbcbe - 2025/1/19 16:51:00
北京看白癜风哪里医院最专业 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/

执行引擎是Java虚拟机核心的组成部分,我们主要偏向于引擎运行中的机制和原理而非其结构代码,因为前者要有实际应用价值很多,而对于不从事虚拟机开发的人员来说,结构代码几乎没有任何意义。

运行时栈帧结构

栈帧,是JVM方法调用的最基本执行单元,它是支持调用操作的一种数据结构。具体来看,它存储了方法的局部变量表、操作数栈、动态连接和方法返回地址和一些额外的附加信息,其结构图如下:

(栈帧结构示意图)

局部变量表

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

变量表是以变量槽(VariableShot)作为最小单位的,一个变量槽可以存放一个boolean、byte、char、short、int、float、reference和returnAddress类型的数据,变量槽的具体大小与操作系统位数有关,2位操作系统的长度为2位长度,64位的则为64位长度。

操作数栈

操作数栈,OperandStack,是一个存放可以存放包括long和double在内的任意类型的数据的数据快,1个栈占2位长度。

当一个方法开始执行的时候,操作数栈是空的,在方法的执行过程中,会有各种字节码指令的写入和提取。例如执行整数的加法时,iadd指令会要求在操作数栈的栈顶存放着两个int类型的数据,执行时这两个数据会依次出栈,执行结果在完成后再次入栈。

动态链接

动态链接,DynamicLinking。每一个栈帧都包含一个指向运行时常量池的引用,持有这个引用是为了支持方法调用中的动态连接。相当于在栈和方法区的子区运行时常量池之间建立了一座桥梁,通过这座桥梁,就可以动态去分配、关联变量和常量值的关系。

方法返回地址

方法返回地址,MethodReturnAddress。方法返回通常来讲只有两种情况,一是时正常返回,另一种是异常返回,而无论哪种返回,都需要返回到当初方法被调用的地方,而方法返回地址的使命就是来登记这一信息。

1
查看完整版本: 虚拟机字节码执行引擎