JVM類載入過程 & 雙親委派模型
JVM類載入過程 & 雙親委派模型
聲明類載入過程
類載入機制:JVM將類描述數據從.class文件中載入到內存,並對數據進行,解析和初始化,最終形成被JVM直接使用的Java類型。
——《深入理解Java虛擬機 JVM高級特性與最佳實踐》
載入:載入階段由類載入器負責,過程見類載入器;
驗證:驗證階段負責驗證類數據信息是否符合JVM規範,是否是一個有效的位元組碼文件;
準備:準備階段負責為類中static變數分配空間,並初始化(與程序無關,系統初始化);
解析:解析階段負責將常亮池中所有符號引用轉換為直接引用;
初始化:初始化階段負責將所有static域按照程序指定操作對應執行(賦值static變數,執行static塊)
上述階段通常都是交叉混合允許,沒有嚴格的先後執行順序;
類載入器類載入器的主要任務:是類載入過程中的載入操作:根據一個類的全限定名讀取該類的二進位位元組流到JVM內部,然後轉換為一個對應的java.lang.Class
對象實例;
開發者可以通過編寫自定義類載入器來自定義類的載入規則
類載入器分類啟動類載入器/Bootstrap ClassLoader在HotSpot虛擬機中,Bootstrap ClassLoader用C++語言編寫並嵌入JVM內部,主要負載載入JAVA_HOME/lib
目錄中的所有類,或者載入由選項-Xbootcalsspath
指定的路徑下的類;
ExtClassLoader繼承ClassLoader類,負載載入JAVA_HOME/lib/ext
目錄中的所有類型,或者由參數-Xbootclasspath
指定路徑中的所有類型;
應用程序類載入器/AppClassLoader
ExtClassLoader繼承ClassLoader類,負責載入用戶類路徑ClassPath
下的所有類型,一般情況下為程序的默認類載入器;
Java虛擬機規範將所有繼承抽象類java.lang.ClassLoader的類載入器,定義為自定義類載入器;
雙親委派模型雙親委派過程:當一個類載入器收到類載入任務時,立即將任務委派給它的父類載入器去執行,直至委派給最頂層的啟動類載入器為止。如果父類載入器無法載入委派給它的類時,將類載入任務退回給它的下一級載入器去執行;
除了啟動類載入器以外,每個類載入器擁有一個父類載入器,用戶的自定義類載入器的父類載入器是AppClassLoader;
雙親委派模型可以保證全限名指定的類,只被載入一次;
雙親委派模型不具有強制性約束,是Java設計者推薦的類載入器實現方式;
參考[1] 《Java虛擬機精講》
[2] 《深入理解Java虛擬機 JVM高級特性與最佳實踐》
※關於微信和支付寶自動退款介面的接入總結
※Oracle CDC簡介及非同步在線日誌CDC部署示例
※Amazing ASP.NET Core 2.0
TAG:達人科技 |
※外用護膚品難以吸收?采美365網:ATeDS油水雙親入膚系統,剖析皮膚層
※又是只能過過眼癮!這雙親友限定Air Jordan 4 White Cement真的很心動!
※韓國人看中國的兒童節&雙親節
※Cell:改寫教科書!華人學者造出雙親相同的小鼠!有望解放女性!
※哺乳動物胚胎首次分裂過程中雙親染色體保持隔離
※父母雙親
※賈老闆穿的這雙親友限定Air Jordan 3 「Quai 54」,買不到也得看看!
※金鐘國韓國父母節上傳全家福照片 雙親出鏡引發關注(圖)
※黃曉明母親節帶雙親香港旅行,黃媽媽手上的鑽戒比baby的婚戒還大
※佛教音樂:雙親佛
※第一夫人雙親獲綠卡,被質疑屬於特朗普力除的「鏈式移民」
※失去雙親的小野鴨,和競爭對手潛鳥組成一家三口,專家也看懵了
※宋一國:雙親節公開三胞胎親筆信「感謝爸爸、媽媽養育我」
※手相:相學中大拇指代表父母,通過你的大拇指可看出你雙親運勢
※七夕節,中國雙親的浪漫
※文青:懷念雙親
※闊別十六年的重逢 湘潭夫妻找回失蹤兒子 湘潭第一例DNA雙親活體對比找回的失蹤兒童
※30歲華裔男子手刃雙親,殺死母親重傷父親!
※特朗普與槍擊案中失去雙親的嬰兒合照:豎起大拇指,目的不言而喻
※尤敬東:小年祭雙親