JVM读书笔记PART3

一、早期(编译器)优化

语法糖

c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类

而Java中 是伪泛型采用类型擦除的方法实现泛型    List<Integer> List<String> 运行期就是同一个类

 

编译期错误,无法识别两个方法。

 

语法糖:自动拆箱、装箱 可变参数 遍历循环

条件编译

 

二、晚期(运行期)优化

二者各有优势:

 

分层编译策略:

有两种进行热点探测的方式:

1.基于采样的热点探测 不精准容易受到线程阻塞影响判断

2.基于计数器的热点探测 较为精准但是有些麻烦  一般采用这种

 

回边计数器

 

达到阙值之后 会在后台编译代码

 

C1简单快速三段式编译

C2会执行所有的经典优化

 

ps

栈溢出错误 递归调用方法 

 

 

1.公共子表达式

优化后

2.数组范围检查消除

3.方法内联

 

 

很多情况下虚拟机的内联都是一种激进优化

 

4.逃逸分析

 

三、JAVA与C++编译器的对比

 

posted @ 2016-08-17 21:02  丨核桃牛奶  阅读(121)  评论(0编辑  收藏  举报