逃逸分析(Escape Analysis)

什麼是逃逸?spa

   逃逸是指在某個方法以內建立的對象,除了在方法體以內被引用以外,還在方法體以外被其它變量引用到;這樣帶來的後果是在該方法執行完畢以後,該方法中建立的對象將沒法被GC回收,因爲其被其它變量引用。正常的方法調用中,方法體中建立的對象將在執行完畢以後,將回收其中建立的對象;故因爲沒法回收,即成爲逃逸。code

    /**
     * 無逃逸
     */
    void test01() {
        String test1 = "test1";
    }
    String test2;

    /**
     * 逃逸
     */
    void test02() {
        test2 = "test2";
    }

在方法內的變量不會逃逸,在方法外聲明的對象會發生逃逸,脫離了方法的控制,方法結束時變量沒有結束;對象

逃逸分析參數設置:blog

-XX:+DoEscapeAnalysis//使用
-XX:-DoEscapeAnalysis//不用
相關文章
相關標籤/搜索