10.10類加載器

java高級-類加載器

1.classloader
程序不會一次性加載所有的.class文件,.class文件有入口方法。而是根據(jù)程序需要根據(jù)java的加載機制動態(tài)的加載某一個.class文件到內(nèi)存中

1.什么是類加載器
    ClassLoader就是用來動態(tài)加載class文件到內(nèi)存當中使用
2.類加載類型
    BootStrap ClassLoader;啟動類的加載器,負責加載放在jdk一個叫l(wèi)i目錄下的文件,能被虛擬機識別的一個類, 這個類不繼承ClassLoader類,它的底層是c++編寫的
    Extension ClassLoader:擴展加載器,主要是負責加載jia(還是jin)目錄下的ext的目錄,可以直接使用這個擴展類加載器
    App ClassLoader:應用程序加載器, 負責加載應用用戶路徑下所指定的類,所以可以直接使用這個類加載器
    
    第二個分類(站在java虛擬機的角度)
    1.啟動類加載器
        BootStrap ClassLoader,c++實現(xiàn),屬于虛擬機內(nèi)的一部分
        所有其他的類加載器,java實現(xiàn),獨立于虛擬機之外,繼承ClassLoader,這些加載器需要啟動類加載器 加載完成之后,才能加載其他的類
3.雙親委托模型
    圖:
    他們之間的父子關(guān)系并不是通過繼承來實現(xiàn)的,而是通過組合關(guān)系來復用 加載器中的代碼
    
    工作流程:比如說 有一個類加載器收到了要加載java的.classw文件要求,它首先不會自己的嘗試加載這個類,而是請求委托給父加載器去完成,所有的加載請求都會傳遞到頂層的啟動類加載器中,只有類加載器在它的搜索范圍內(nèi)沒有找到所需要的類時,它無法完成加載,這時 它的子加載器才會嘗試去加載。
    
    使用雙親委托模型它能組織類加載器之間的關(guān)系,它有一個明顯的好處,java類隨著類加載器一起具備了一種帶層次的關(guān)系,這對于保護程序的穩(wěn)定性非常重要。
    
4.類加載的過程
    圖:
        7個階段
        加載、驗證、準備、解析、初始化、使用、卸載
        
        加載、驗證、準備、初始化這四個階段是確定的,而解析不是,它在某些情況下可以在初始化階段之后來開始,這是為了能支持java語言的動態(tài)綁定,
        
        使用、卸載 是在所有順序定完了之后再執(zhí)行
        
        靜態(tài)綁定
        動態(tài)綁定
    第一步:加載
        1.通過一個類的全限定名來獲取其定義的二進制字節(jié)流
        2.將這個字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為運行時的數(shù)據(jù)結(jié)構(gòu)
        3.在Java堆中生成一個代表這個類的java.lang.Class對象,作為對方法區(qū)中這些數(shù)據(jù)的訪問入口
        
        既可以使用系統(tǒng)加載器加載,也可以自定義加載器加載
        
    第二部:驗證  
        1.為了確保Class文件中的字節(jié)流包含的信息符合當前虛擬機的要求
        2.文件格式的驗證、元數(shù)據(jù)的驗證、字節(jié)碼驗證和符號引用驗證
    第三部:準備
        1.對基本數(shù)據(jù)類型。如果不顯示的賦值,會賦默認值
        2.對于同時被static 和final修飾的常量,必須顯示的為其賦值,否則編譯不通過
                只被final修飾的變量,可以在類初始化時賦值,不會被默認賦值
        3.對于引用數(shù)據(jù)類型 reference,默認值null
        4.在數(shù)據(jù)初始化時,如果沒有賦值, 默認數(shù)據(jù)里頭的值是0
        
    第四部:解析
        解析階段是虛擬機將常量池中的符號轉(zhuǎn)化為直接引用的過程
        
        圖:
            本類-》接口-》父接口-》。。。--》父類-》祖父類-》。。。
            類解析、接口解析、類中方法解析、接口中方法解析
        
        1.類和接口的解析
            首先判斷鎖轉(zhuǎn)換的直接引用 是數(shù)組類型,還是普通對象類型引用,從而進行不同的解析
        2.字段解析
            肯定會在本類中查找,是否包含簡單名稱,字段描述都符合的字段,如果有,則查找結(jié)束,如果沒有,按照繼承關(guān)系從上往下一次查找
        3.類方法解析。類方法解析的搜索步驟和字段搜索差不多
            判斷該方法是類,還是接口的方法。對類的方法的匹配順序,是先搜索父類,再搜索接口
        4.接口方法解析
            遞歸向上搜索接口
        5.初始化
            初始化階段是執(zhí)行類構(gòu)造器 方法的過程
?著作權(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)容