Java文件通过Javac编译器编译成class文件,编译后的class文件交由JVM平台加载运行,即Java需要经过编译期和运行期
编译期优化指的是Javac编译器将Java文件转化为字节码即class文件的优化过程;
运行期优化指的是JIT编译器将热点代码编译成与平台相关的机器码,并进行多层次的优化,可以理解为对多个指令操作后得到同一结果合并为单个指令操作或者无用指令去除等;
编译过程(Java文件转化为class文件的过程)
1.解析与填充符号表过程:1)词法,语法分析2)填充符号表
2.插入式注解处理器的注解处理过程(jdk5之后提供对注解的支持新增操作)
3.分析与字节码生成过程1)标注检查 2)数据及控制流分析 3)解语法糖 4)字节码生成
语法糖包含条件编译、断言、Switch语句与枚举及字符串结合、可变参数、自动装箱/拆箱、枚举、内部类、泛型擦除、增强for循环、try-with-resources语句等等。
解语法糖的例子:字符串的拼接实际上调用的是StringBuider类的append方法
JIT编译器优化
公共子表达式消除(不进行重复计算,保存原先计算的值)
数组边界检查消除
方法内联(方法调用需要压栈出栈,将方法设置为具体的表达式可减少方法的压栈出栈)
逃逸分析和栈上分配(分析变量的内存情况,没发生逃逸(不能共享)分配在栈上
Java类加载五个过程