逃逸分析
逃逸分析并不是直接的优化手段,而是一个代码分析,通过动态分析对象的作用域,为其它优化手段如栈上分配、标量替换和同步消除等提供依据,发生逃逸行为的情况有两种:方法逃逸和线程逃逸。
- 方法逃逸:当一个对象在方法中定义之后,作为参数传递到其它方法中;
- 线程逃逸:如类变量或实例变量,可能被其它线程访问到;
如果不存在逃逸行为,则可以对该对象进行如下优化:同步消除、标量替换和栈上分配。
注意:逃逸分析时C2进行很多优化的基础,逃逸分析时指根据运行状况来判断方法上的变量是否被外部读取。基于逃逸分析C2编译器在编译时会做标量替换、栈上替换和同步消除等优化;