官方术语:一种确定指针动态范围的静态分析,它可以分析在程序的那些地方可以访问到指针。
    通俗来说:通过动态分析对象的作用域,为其它优化手段比如:栈上分配,标量替换和同步消除等提供依据。
    方法逃逸:当一个对象在方法中定义后,作为参数传递到其它方法中。
    线程逃逸:类变量或者实例变量,可能被其它线程访问到。
    如果不存在逃逸行为,则可以对对象进行优化:同步消除、标量替换和栈上分配。

    判断逃逸:1、对象是否存入堆中(静态字段或者堆中对象的实例字段)。2、是否被传入未知代码中。

    部分逃逸分析是一种附带了控制流信息的逃逸分析。它将判断新建对象真正逃逸的分支,并且支持将新建操作推延至逃逸分支。

    栈上分配
    经过逃逸分析后能够证明该对象不逃逸,JVM可以将对象分配到栈上,在new语句所在方法退出时,弹出当前栈桢来自动回收内存空间。

    标量替换
    标量,就是仅能存储一个值的变量,比如 Java 代码中的局部变量。标量替换可以看成将原本对对象的字段访问,替换为一个个局部变量的访问。HotSpot没有使用栈上分配,使用了标量替换。