编译器优化
把.java->.class的过程
一、Javac编译器
1) 解析与填充符号表
- 1.词法、语法分析
- 2.填充符号表
2) 注解处理器
3) 语义分析与字节码生成
- 1.标注检查
- 2.数据及控制流分析
- 3.解语法糖
- 4.字节码生成
二、Java语法糖
- 1.泛型与类型擦除
- 2.自动装箱、拆箱与遍历循环
- 3.条件编译
运行期优化
即时编译器(Just In Time Compiler,JIT)
当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。
在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获得更高的执行效率。
编译对象与触发条件
"热点代码"
被多次调用的方法
被多次执行的循环体
热点探测
基于采样
基于计数器
编译过程
三段式编译器
HIR
LIR
JIT编译过程是一个虚拟机中最能体现技术水平也是最复杂的部分。
编译优化技术
- 1.公共子表达式消除
- 2.数组边界检查消除
- 3.方法内联
- 4.逃逸分析
栈上分配
同步消除
标量替换
可以做到运行期性能监控