1、概述
字节码执行引擎 是 Java虚拟机 最核心的部分;
作用:执行 字节码 ;
Java虚拟机规范中 制定了 Java虚拟机字节码执行引擎 的概念模型,这个概念模型 称为 各种Java虚拟机执行引擎的统一外观;
2、运行时栈桢结构
2.1、栈桢:
运行时数据区 中 栈的 元素;
支持 虚拟机进行方法调用、方法执行的数据结构;
每个栈桢 都包含了 局部变量表、操作数栈、动态链接、方法返回地址、一些额外信息;
代码编译期 局部变量表、操作数栈 所需要的内存大小已经确定,并 写入到方法表的code属性中;
同一个线程中 的方法调用链可能很长,很多方法处于同时执行状态,对于 执行引擎 来讲,只有位于栈顶的栈桢才是有效的;
a, 局部变量表
作用:存放 方法参数、方法内定义的局部变量;
Java源代码 编译为 Class文件时,在方法的Code属性的max_locals中写入 当前局部变量表 所需要的最大容量;
局部变量表 以 变量槽 为基本单位;
虚拟机 通过 索引定位的方式 使用局部变量表,索引值范围从0 至 最大slot数量;
合适的变量作用域 有助于 GC;
局部变量 不存在 类似于类变量的准备阶段,需要 显式初始化;
b, 操作数栈
作用:执行方法,操作数 入栈 | 出栈;
编译期间 ,操作数栈的最大容量 被写入 Code属性的max_stacks中;
一个方法开始执行的时候,操作数栈 是空的,方法执行过程 中 字节码指令 往 操作数栈 中 进行 入栈、出栈;
c, 动态链接
原文:https://www.cnblogs.com/anpeiyong/p/14893859.html