JIT编译优化
- 公共子表达式消除– ab+(c+ba) = E + (c + E)
- 方法内联–将方法调用直接替换称方法体中的代码以减少压栈和出栈的开销
- 逃逸分析–确定方法内被定义的对象能否被外部方法引用
- 全局变量赋值逃逸
- 方法返回值逃逸
- 实例引用逃逸
- 线程逃逸(共享变量或赋值给类变量)
- 针对没有逃逸的对象可以做的优化
- 对象的栈上内存分配–不会逃逸的对象创建在栈内存中(有几率,并不是所有),减少GC次数
- 同步锁消除–不会逃逸的对象不需要加锁,在编译时就将同步锁去掉,以减少加锁、解锁带来的资源开销
- 标量替换–当A对象的属性有固定值时,被B对象创建并使用该属性时,会取消创建对象直接使用该属性的固定值(使用分解后的成员变量)