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++编译器的对比
才能这种东西 本来就是靠自己挖掘创造的 我也不是什么天才 我只是比任何人都拼命工作 一步一个脚印走过来了 等我回头一看 背后没有一个身影 那帮懒惰的人在山脚念叨着 谁叫那家伙是天才 开什么玩笑 我最讨厌悠哉悠哉长大的慢性子 比我有时间 有精力 感情丰富的人 为什么比我懒惰 那就给我啊 要把这些东西都浪费掉的话 就通通给我 我还有很多很多想创造的东西 给我啊--------摘自《legal high II》 与诸君共勉