寻机设计团队几乎把对代码的所有优化措施都集中在了即时编译器之中。
hotspot 虚拟机中内置了两个 即时编译器:
C1编译器 client compiler
C2编译器 server compiler
编译器优化技术
公共子表达式消除
数组边界检查消除
方法内联
逃逸分析
逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,他可能被外部方法所应用,例如作为调用参数传递到其它方法中,称为方法逃逸。甚至还有可能被外部线程访问到,比如复制给类变量,或可以在其他线程中访问到的实例变量,称为线程逃逸。
如何使得对象不会逃逸到方法或线程之外?
使用栈上分配
使用同步消除
使用标量替换
备注:逃逸分析技术目前尚未足够成熟,仍有很大的改进余地,不成熟的原因是不能保证逃逸分析的性能收益必定高于它的消耗。
Boy-20180722