编译期优化

三类编译器:

 

  • 前端编译器将JAVA编译成CLASS文件,JAVAC,ECJ
  • JIT编译器把字节码转换成机器码的过程,HOTSPOT VM的C1,C2编译器
  • AOT编译器静态提前编译器,直接将JAVA编译成本地机器码的过程
Annotation,可以看作是一组编译器的插件,这些插件可以读取,修改,添加抽象语法树的任意元素,如果这些插件对语法树进行了修改,那么编译器将回到解析及填充符号表的过程重新处理,知道所有的annotation都没有再对语法树的修改位置,每次循环成为一个round.

常量折叠:int a= 1+2; -> int a=3;

JAVA语法糖
主要包括泛型,变长参数,自动装箱等

泛型,在JAVA中,只在程序源码中存在,编译后泛型将被替换成原生类型(在相应位置插入强制转型代码)。
在JAVA泛型中,两种情况值得注意,
public static void method(List<String> list)
public static void method(List<Integer> list) 
这两个方法是不能并存的
但如果返回值不一样,就可以通过编译了,因为CLASS文件格式中,方法描述符包括返回值

自动装箱,是通过valueOf实现的

遍历循环是通过Iterator实现的

JAVA编译时,如果碰到常量作为判断条件,则会自动执行为真时的语句,而省去为假时的语句







 

你可能感兴趣的:(优化)