逃逸分析做为其余优化手段提供依据的分析技术,其基本行为就是分析对象动态做用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如做为调用参数传递到其余方法中,称为方法逃逸。甚至还有可能被外部线程访问到,好比赋值给类变量或能够在其余线程中访问的实例变量,称为线程逃逸。
若是能证实一个对象不会逃逸到方法或线程以外,也就是别的方法或者线程没法经过任何途径访问到这个对象,则可能为这个变量进行一些高校的优化。
1)栈上分配,若是肯定一个对象不会逃逸出方法以外,那么把这个对象在栈上分配内存,对象所占用的内存空间就能够随栈帧出栈而销毁。在通常应用中,不会逃逸的局部对象所占的比例很大,若是可以使用栈上分配,那么对象就会随着方法的结束而自动销毁,垃圾收集系统的压力将会小不少。
2)同步消除,线程同步自己就是一个相对耗时的过程,若是逃逸分析可以肯定一个变量不会逃逸出线程,没法被其余线程访问,那这个变量的读写确定就不会有竞争,对这个变量实施的同步操做也就能够消除掉。
3)标量替换:若是逃逸分析证实一个对象不会被外部访问。而且这个对象能够被拆散的话,那程序真正执行的时候可能不建立这个对象,而改成直接建立它的若干个被这个方法使用到的成员变量来替换。优化