执行引擎概述
- 执行引擎是Java虚拟机核心组件之一
- “虚拟机”相当于一个“物理机”的概念,这两种机器都有代码执行的能力,其区别是物理机的执行引擎是建立在处理器、缓存、指令集和操作系统上的,而虚拟机的执行引擎是由软件自行实现的,因此可以不受物理条件的制约的指定指令集与执行引擎的结构体系,能够执行那些不被支持的指令格式
- JVM的主要任务是负责装载字节码到其内部,但字节码并不能直接运行在操作系统上,因此字节码指令非等价于本地机器的指令,内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及一些其他信息
- 那么,如果想让一个Java程序运行起来,执行引擎(Execution Engin)的任务就是将字节码指令解释/编译对对应平台上的本地指令才可以。简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者
解释器(Interpreter)
当Java虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行
JIT编译器(Just In Time Compiler)
就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言
执行引擎的工作过程
- 执行引擎在执行的过程中需要执行什么样的字节码指令完全取决于PC寄存器
- 每当执行完一项指令操作后PC寄存器就会更新下一条被执行的指令地址
- 当然在方法执行的过程中,执行引擎可能会通过存储在局部变量表中的对象引用准确定位到存储在Java堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象自的类型信息
- 从外观上来看,所有的Java虚拟机执行引擎的输入、输出、都是一致的:输入的是字节码为二进制流,处理过程是字节码解析执行的有效过程,输出的是执行结果
Hotspot VM可以设置程序执行方式
缺省模式下Hotspot VM是采用编译器和解释器并存的架构,当然开发人员可以根据具体应用场景,通过命令显示地为Java虚拟机指定运行时到底完全采用解释器执行,还是完全采用完全采用即时编译器执行
- -Xint:完全采用解释器模式执行
- -Xcomp:完全采用即时编译器模式执行程序。如果即时编译器出现问题,解释器会介入执行
- -Xmixed:采用解释器+即时编译器的混合模式共同执行程序
C:\Users\lenovo>java -Xint -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, interpreted mode)
C:\Users\lenovo>java -Xcomp -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, compiled mode)
C:\Users\lenovo>java -Xmixed -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)
其他
文章中的图是通过Process On制作。好工具一定要分享给最好的朋友,ProcessOn助您和好友一起高效办公!