JVM加載類 - 懶加載模式

可能有時有想,項目開發(fā)過程中經(jīng)常會用到各種第三方庫,包括各種框架、工具類、sdk等等,那么這些第三方的類難道都等到項目啟動的時候,把這些類統(tǒng)統(tǒng)都加載到JVM內(nèi)存中嘛,這不得把JVM給“擠爆了”,所以,為了解決這個困境,就引出了一個“懶加載”的概念
那么如何證明是 JVM 是懶加載模式呢
1、先看下面一段代碼
public class ClassLoaderController {

    static {
        System.out.println("********** loading ClassLoaderController class **********");
    }

    public static void main(String[] args) {
        new DemoA();
        System.out.println("*************** loading test ************");
        DemoB demoB = null;
    }
}

class DemoA {
    static {
        System.out.println("********** loading DemoA class **********");
    }

    public DemoA() {
        System.out.println("********** init DemoA **********");
    }
}

class DemoB {
    static {
        System.out.println("********** loading DemoB class **********");
    }

    public DemoB() {
        System.out.println("********** init DemoB **********");
    }
}
2、簡單分析一下執(zhí)行順序
  • 第一步:運行main方法,運行main()方法首先肯定會加載ClassLoaderController這個類,類加載的最后一步是初始化,其中就會有執(zhí)行靜態(tài)代碼塊這一步驟,所以首先會輸出
    ********** loading ClassLoaderController class **********
  • 第二步:在main方法中,會去new DemoA(),這一步,也代表了會去用DemoA()這個類,那毫無疑問,肯定會去加載DemoA()這么一個類,那么在加載DemoA()類的過程中,同樣最后一步初始化中會去執(zhí)行靜態(tài)代碼快,輸出********** loading DemoA class **********,接著再執(zhí)行構(gòu)造方法,輸出********** init DemoA **********
  • 第三步:為了方便觀察打印結(jié)果,我們直接輸出*************** loading test ************
  • 第四步:我們定義了DemoB類,但是我們給它賦值的是空值,也就是說,我們是沒用到DemoB類的,所以自然也不會打印********** loading DemoB class ******************** init DemoB **********
3、綜合分析,打印結(jié)果為
********** loading ClassLoaderController class **********
********** loading DemoA class **********
********** init DemoA **********
*************** loading test ************
符合我們的預(yù)期,也證明了,JVM的類加載是一個懶加載
本文只是簡單驗證了一下,希望對你有所幫助
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容