虚拟机字节码执行引擎
2018-01-22 08:04
169 查看
执行引擎在执行Java代码的时候,可能有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能是二者兼备。所有引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是结果。
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。
栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始到执行完成的过程,就对应着一个栈帧的在虚拟机栈里面从入栈到出栈的过程。
确定被调用方法的版本,即调用哪一个方法。
1. 解析——静态的
2. 分派
静态分派——重载方法
在编译阶段,Java编译器根据参数的静态类型决定调用哪个方法。所有依赖静态分派类型来定位方法执行版本的分派动作,都成为静态分派。
优先级:准确类型 > 自动装箱类 > 自动装箱类接口 > 自动装箱类父类 > 可变参数
- 动态分派——重写方法
把运行期根据实际类型确定方法的分派过程成为动态分派。
- 单分派和多分派
单分派——动态分派 多分派是静态分派
<
4000
p>
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。
栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始到执行完成的过程,就对应着一个栈帧的在虚拟机栈里面从入栈到出栈的过程。
确定被调用方法的版本,即调用哪一个方法。
1. 解析——静态的
- invokestatic:调用静态方法 - invokespecial:调用实例构造器<init>方法、私有方法和父类方法 - invokevirtual:调用所有的虚方法。但final是非虚方法却用此调用 - invokeinterface:调用接口方法,会在运行时再确定一个实现此接口的对象。
2. 分派
静态分派——重载方法
在编译阶段,Java编译器根据参数的静态类型决定调用哪个方法。所有依赖静态分派类型来定位方法执行版本的分派动作,都成为静态分派。
优先级:准确类型 > 自动装箱类 > 自动装箱类接口 > 自动装箱类父类 > 可变参数
- 动态分派——重写方法
把运行期根据实际类型确定方法的分派过程成为动态分派。
- 单分派和多分派
单分派——动态分派 多分派是静态分派
<
4000
p>
相关文章推荐
- 《深入理解Java虚拟机——JVM高级特性与最佳实践》学习笔记——虚拟机字节码执行引擎
- 《深入理解java虚拟机》学习笔记之虚拟机字节码执行引擎
- 《深入理解java虚拟机》学习-第八章-虚拟机字节码执行引擎-运行时栈帧结构
- Jvm(60),虚拟机字节码执行引擎----局部变量表
- 虚拟机字节码执行引擎
- jvm笔记8--虚拟机字节码执行引擎
- 虚拟机字节码执行引擎——深入理解Java虚拟机
- 虚拟机字节码执行引擎
- JVM-深入虚拟机字节码执行引擎
- 《深入理解java虚拟机》学习-第八章-虚拟机字节码执行引擎-方法调用
- Jvm(61),虚拟机字节码执行引擎----操作数栈
- 深入理解Java虚拟机-8虚拟机字节码执行引擎
- 深入JAVA虚拟机之字节码执行引擎
- 深入学习Java虚拟机——虚拟机字节码执行引擎
- Jvm(63),虚拟机字节码执行引擎----返回地址和附加信息
- JVM读书笔记(五):虚拟机字节码执行引擎
- 深入理解JVM-虚拟机字节码执行引擎
- Jvm笔记总结(十):虚拟机字节码执行引擎
- Understanding the JVM(十二)虚拟机字节码执行引擎
- 深入理解Java虚拟机-虚拟机字节码执行引擎(八)