<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 88, comments - 3, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    關于java默認的類加載器的簡單代碼研究

    Posted on 2016-03-16 15:40 Milo的海域 閱讀(315) 評論(0)  編輯  收藏 所屬分類: Java
    1. 默認的3個classloader: BootstrapClassloader (Native實現), ExtClassloader, AppClassloader (Java實現)
    2. 3個加載器并不是真正的父子繼承關系,而是邏輯上的,JVM啟動先創(chuàng)建ExtClassloader instance,然后構造AppClassloader的時候傳入ExtClassloader實例作為parent
            Launcher.ExtClassLoader extcl;
            
    try {
                extcl 
    = Launcher.ExtClassLoader.getExtClassLoader();
            } 
    catch (IOException var10) {
                
    throw new InternalError("Could not create extension class loader", var10);
            }

            
    try {
                
    this.loader = Launcher.AppClassLoader.getAppClassLoader(extcl);
            } 
    catch (IOException var9) {
                
    throw new InternalError("Could not create application class loader", var9);
            }

    關于雙親委派原理: 在加載類的時候,會看看parent有沒有設定,如果設定了 就調用parent.loadClass方法,如果沒設定(==null)也就是parent應該是BootstrapClassloader, 會調用native的findBootstrapClass來加載類,代碼:
                    try {
                        
    if(this.parent != null) {
                            c 
    = this.parent.loadClass(name, false);
                        } 
    else {
                            c 
    = this.findBootstrapClassOrNull(name);
                        }
                    } 
    catch (ClassNotFoundException var10) {
                        ;
                    }

    目的是按照一定優(yōu)先級別裝載系統(tǒng)的lib,系統(tǒng)ext目錄的lib,以及classpath的lib,防止系統(tǒng)的默認行為或者類的實現被修改。

    3. java 類的動態(tài)加載
    Java內置的ClassLoader總會在加載一個Class之前檢查這個Class是否已經被加載過,已經被加載過的Class不會加載第二次。因此要想重新加載Class,我們需要實現自己的ClassLoader。
    另外一個問題是,每個被加載的Class都需要被鏈接(link),這是通過執(zhí)行ClassLoader.resolve()來實現的,這個方法是 final的,因此無法重寫。Resove()方法不允許一個ClassLoader實例link一個Class兩次,因此,當你需要重新加載一個 Class的時候,你需要重新New一個你自己的ClassLoader實例。
    主站蜘蛛池模板: 亚洲的天堂av无码| 国产午夜亚洲精品理论片不卡| 亚洲欧洲成人精品香蕉网| 国产AV无码专区亚洲AV蜜芽| 成人免费一区二区三区在线观看| 亚洲AV无码国产精品色| 亚洲天堂免费在线| 亚洲一区在线观看视频| 久久久久久国产a免费观看黄色大片| 亚洲视频网站在线观看| 91香蕉国产线观看免费全集| 亚洲第一香蕉视频| 免费看污成人午夜网站| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 久久精品国产亚洲av瑜伽| 成年男女男精品免费视频网站| 亚洲综合色婷婷在线观看| 成人免费在线观看网站| WWW国产亚洲精品久久麻豆| 亚洲精品成人网久久久久久| 两性色午夜免费视频| 亚洲福利在线视频| 美女被免费喷白浆视频| 亚洲精品乱码久久久久久V| 亚洲国产精品毛片av不卡在线| 久久国产精品免费| 亚洲一区二区电影| 毛片a级毛片免费播放100| 色天使亚洲综合一区二区| 不卡精品国产_亚洲人成在线 | 特级毛片免费播放| 国产国拍亚洲精品mv在线观看| 久9久9精品免费观看| 亚洲宅男精品一区在线观看| 国产大片51精品免费观看| 黄页免费在线观看| 亚洲av专区无码观看精品天堂| 免费大黄网站在线观| 午夜免费福利小电影| 亚洲精品色播一区二区| 中文字幕亚洲日韩无线码|