JVM(9)编译器与编译优化

前端编译器:java -> class
后端编译器:class -> 机器码

class文件生成过程:
1、解析与填充符号表。
2、处理注解。
3、分析生成字节码。

前期优化:
前期的优化主要靠语法糖来实现,包括:
1、泛型与类型擦除。
2、自动装箱、拆箱、遍历循环。
3、条件编译。

晚期优化:
晚期优化主要靠即时编译器来实现,将热点代码编译为平台相关的机器码,并优化。

HotSpot虚拟机的即时编译器需要了解的内容:
1、为何HotSpot虚拟机要使用解释器和编译器并存的架构?
解释器启动快,省内存。随着时间迁移,更多的代码被编译成本地代码后,就可以获得更高的执行效率,因此编译器可以提高效率。
2、为何HotSpot虚拟机要实现两个不同的编译器?
HotSpot实现了两个编译器C1(Client Compiler)编译器和C2(Server Compiler)编译器。C1更快,轻量;C2质量高,重量级,有性能监控。
3、程序何时使用解释器执行?何时使用编译器执行?
“热点代码”会使用编译器运行。热点代码是指:被多次调用的方法,或者是被多次执行的循环体。
判断一段代码是不是热点代码,有两种方式:基于采样的热点探测,基于计数器的热点探测。HotSpot采用第二种–基于计数器的热点探测方法。
4、哪些程序代码会被编译为本地代码?如何编译为本地代码?
热点代码会被编译成本地代码,C1和C2采用了不同的逻辑。
C1将字节码转换为本地代码需要三步:
1)一个平台无关的前端将字节码转换为高级中间代码;
2)一个平台相关的后端将高级中间代码转换为低级中间代码;
3)一个平台相关的后端将低级中间代码转换为机器码。
C2的转换逻辑较为复杂。

猜你喜欢

转载自blog.csdn.net/wee616/article/details/78436637