什麼是逃逸?spa
逃逸是指在某個方法以內建立的對象,除了在方法體以內被引用以外,還在方法體以外被其它變量引用到;這樣帶來的後果是在該方法執行完畢以後,該方法中建立的對象將沒法被GC回收,因爲其被其它變量引用。正常的方法調用中,方法體中建立的對象將在執行完畢以後,將回收其中建立的對象;故因爲沒法回收,即成爲逃逸。code
/** * 無逃逸 */ void test01() { String test1 = "test1"; }
String test2; /** * 逃逸 */ void test02() { test2 = "test2"; }
在方法內的變量不會逃逸,在方法外聲明的對象會發生逃逸,脫離了方法的控制,方法結束時變量沒有結束;對象
逃逸分析參數設置:blog
-XX:+DoEscapeAnalysis//使用 -XX:-DoEscapeAnalysis//不用