执行引擎篇
字数: 0 字 时长: 0 分钟
对照 JVM 架构图来看执行引擎,它负责将加载到内存中的字节码解释或编译成特定平台的机器指令并执行。
执行引擎工作方式
执行引擎工作方式
- 执行引擎在执行的过程中究竟需要执行什么样的字节码指令,完全依赖于 PC 寄存器
- 每当执行完一项指令操作后,PC 寄存器就会更新下一条需要被执行的指令地址
- 在方法的执行过程中,执行引擎可能会通过存储在局部变量表中的对象引用准确定位到存储在 Java 堆区中的对象信息,进一步定义到方法区中的类元信息
解释器
JVM 设计者们的初衷仅仅是单纯地为了满足 Java 程序实现跨平台特性,因此避免采用静态编译地方式直接生成本地机器指令,从而诞生了实现解释器在运行时采用逐行解释字节码程序的想法。
编译器
为什么说 Java 是半编译半解释型语言
AOP 编译器
Ahead of Time Compiler
,在程序运行之前就将字节码转换为机器码。
Java 9 实验性地引入了 AOT 编译器,但最终并没有替代 JIT 编译器,因为这破坏了 “一次编译,到处运行” ,降低了 Java 链接过程的动态性
JIT 编译器
在 HotSpot JVM 中内嵌有两个 JIT 编译器,分别为 Client Compiler
和 Server Compiler
,简称 C1 编译器
和 C2 编译器
。
-client
: 指定 C1 编译器作为 JIT 编译器- C1 会对字节码进行简单和可靠的优化,耗时短,以达到更快的编译速度
- C1 启动快,占用内存小,执行效率没有 C2 快,适用于桌面应用程序
-server
: 指定 C2 编译器作为 JIT 编译器- C2 进行耗时较长的优化,以及激进优化,但优化的代码执行效率更高
- C2 启动慢,占用内存多,执行效率高,适用于服务器端应用