最具代表性的几个优化技术
- 语言无关的经典优化技术之一:公共子表达式消除
- 语言相关的经典优化技术之一:数组范围检查消除
- 最重要的优化技术之一:方法内联
- 最前沿的优化技术之一:逃逸分析
公共子表达式消除
描述 如果一个表达式E已经计算过了,并且从先前的计算到现在E中的所有变量的值都没有发生变化,那么E的这次出现就成为了公共子表达式
int d = ( c * b ) * 12 + a + ( a + b * c );
优化为
int d = E * 12 + a + ( a + E );
优化为
int d = E * 13 + a * 2
数组泛微检查消除
描述 对于虚拟机的执行子系统来说,每次进行数组元素的读写都会带着一次隐含的条件判断,对于拥有大量数组访问的程序代码,这无疑是一种性能负担
如果编译器只要通过数据流分析就可以判定循环变量的取值范围一定不会超出数组的范围,
那么整个循环中就可以把数组的上下界检查消除,节省很多次的条件判断操作
方法内联
方法内联的优化看起来非常简单,不过是吧目标方法的代码“复制”到发起调用的方法之中,避免发生真实方法的调用
逃逸分析
描述 逃逸分析并不是直接优化代码的手段,而是为其他优化手段提供依据的分析技术
1、栈上分配
2、同步消除
3、标量替换