微信公众号(网站建设)合同,黑客钓鱼网站的制作,wordpress move导入,wordpress 编辑器 空格第8章 虚拟机字节码执行引擎
8.1 概述
解释执行#xff0c;编译执行#xff0c;或混合执行
8.2 运行时栈帧结构
一个方法对应一个栈帧#xff0c;一个方法的出入栈代表运行情况。 程序的字节码指令只针对于当前栈帧生效。 栈占用的内存在运行前便已确定。
8.2.1 局部变…第8章 虚拟机字节码执行引擎
8.1 概述
解释执行编译执行或混合执行
8.2 运行时栈帧结构
一个方法对应一个栈帧一个方法的出入栈代表运行情况。 程序的字节码指令只针对于当前栈帧生效。 栈占用的内存在运行前便已确定。
8.2.1 局部变量表
存储局部变量与方法参数
8.2.2 操作数栈
各种字节码指令在运行时在栈中出入栈来实现运算。 两个栈帧会互享一部分数据(调用时局部变量为调用方法的参数等
8.2.3 动态连接
略
8.2.4 方法返回地址
正常退出后将返回值传给调用栈帧即可 异常退出无返回值且当前线程停止运行
8.3 方法调用
8.3.1 解析
类加载时可解析确定唯一版本的方法 1静态方法 2构造方法 3私有方法 4父类方法 5final方法
8.3.2 分派
1静态分派 Human【静态类型】 hm x y ? new Man() : new Woman()【实际类型】 【一个对象的静态类型是编译期可知的而实际类型在运行期间才可知晓】 【方法重载时通过静态类型确定调用方法(编译器可确定)】 【确定重载方法会自动转换直到找不到为止】 转换顺序char int long float double 接口 父类(由下到上) 2动态分派 方法重写由实际类型确定 字段不具有多态性只会使用当前类的没有才会找父类的但子类覆盖父类。 直接在外部调用字段根据静态类型调用。 3单分派与多分派 Java是静态多分派动态但分派的。 【单分派与多分派区别是分派时的宗量数。 宗量方法接收者(this)与参数】 4虚拟机动态分派的实现 通过建立虚方法表来减少搜索元数据子类未重写的父类方法在虚方发表中的入口为父类入口地址重写过即为子类入口地址。
8.4 动态类型语言支持
8.4.1 动态类型语言
无静态类型只有实际类型
8.4.2 Java与动态类型
JVM原本不太支持动态类型
8.4.3 java.lang.invoke包
可以动态调用方法(字节码层面)
8.4.4 invokedynamic指令
略
8.5 基于栈的字节码解释执行引擎
8.5.1 解释执行
JVM处理字节码编译器输出
8.5.2 基于栈的指令集与基于寄存器的指令集
栈运行速度不如寄存器但代码紧凑编译器实现简单。 解释运行时因有大量出入栈操作导致栈指令运行慢但即时编译后的汇编指令便没有这种问题了。
8.5.3 基于栈的解释器执行过程
略【虚拟机执行时会对执行过程做一系列优化】