编译期优化

三类编译器:

 

  • 前端编译器将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编译时,如果碰到常量作为判断条件,则会自动执行为真时的语句,而省去为假时的语句







 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值