<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成本人无码网站| 免费看美女让人桶尿口| 中国china体内裑精亚洲日本| 亚洲精品在线免费观看| 亚洲最大在线视频| 91网站免费观看| 亚洲精品一二三区| 大陆一级毛片免费视频观看i| 最新亚洲卡一卡二卡三新区| 成人免费福利电影| 亚洲av成本人无码网站| 成人爱做日本视频免费| 免费无码午夜福利片| 亚洲国产91精品无码专区| 一本久久A久久免费精品不卡| 久久影院亚洲一区| a级毛片在线免费看| 亚洲精品国产成人专区| 97人妻无码一区二区精品免费| 中国亚洲呦女专区| 久久久精品国产亚洲成人满18免费网站 | 青青青免费国产在线视频小草| 亚洲国产精品午夜电影| 女人18毛片a级毛片免费| 猫咪www免费人成网站| 中文字幕久久亚洲一区| 91成人在线免费观看| 亚洲一卡一卡二新区无人区| 一本久久综合亚洲鲁鲁五月天| 日韩免费无码视频一区二区三区| 亚洲AV日韩AV永久无码下载| 我要看免费的毛片| 中文字幕免费在线看线人动作大片| 18亚洲男同志videos网站| 国产视频精品免费| a毛片在线免费观看| 中国china体内裑精亚洲日本| 亚洲综合国产精品第一页| 久久永久免费人妻精品下载|