乐趣区

解密新一代 Java JIT 编译器 Graal

本文思路很清晰,分两步走。第一步,老的即时编译的缺陷导致新的编译器孕育而生。第二步,具体讲解 Graal 编译器的特性。
老即时编译
流程
先启动解释编译,分析出解释多次的代码,使用 c1 编译器进行编译,再次分析 c1 编译器编译多次的代码,使用 c2 编译器进行编译。
c2 编译器是最重要的一环,因为 c2 编译出高度优化的机器码。
缺陷
1. 旧代码难以扩展和维护 2. 使用更多的 JVM 内联函数,开发成本太大。
具体解释第二点缺陷
JVM 启动的时候会检测运行在哪个处理器上,并且更具特定的处理器生成特定的内联函数表,极大的运用了硬件的能力。这样就导致对于特定的处理器需要特定的内联表函数,就需要更多的内联函数。所以导致开发成本和维护成本大。
新即时编译
目标
更好的编译 Java 代码,那么出发点就是 JIT 就是将字节码转换为机器码,在 Java 中就是从 byte[] 转到另外一个 byte[],那么转换代码可不可以用 java 来写。
优势

工程师开发新编译器的进入门槛要低得多。
编译器的内存安全性。
能够利用成熟的 Java 工具进行编译器开发。
更快的新编译器功能原型设计。
编译器可以独立于 HotSpot。
编译器能够自己编译自己,以生成更快的 JIT 编译版本。

退出移动版