逃逸分析(Escape Analysis)
什么是逃逸?
逃逸是指在某个方法之内创建的对象,除了在方法体之内被引用之外,还在方法体之外被其它变量引用到;这样带来的后果是在该方法执行完毕之后,该方法中创建的对象将无法被GC回收,由于其被其它变量引用。正常的方法调用中,方法体中创建的对象将在执行完毕之后,将回收其中创建的对象;故由于无法回收,即成为逃逸。
/** * 无逃逸 */ void test01() { String test1 = "test1"; }
String test2; /** * 逃逸 */ void test02() { test2 = "test2"; }
在方法内的变量不会逃逸,在方法外声明的对象会发生逃逸,脱离了方法的控制,方法结束时变量没有结束;
逃逸分析参数设置:
-XX:+DoEscapeAnalysis//使用 -XX:-DoEscapeAnalysis//不用