摘要:類加載過程雙親委派模型聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處類加載過程類加載機制將類描述數(shù)據(jù)從文件中加載到內(nèi)存,并對數(shù)據(jù)進行,解析和初始化,最終形成被直接使用的類型。深入理解虛擬機高級特性與最佳實踐加載加載階段由類加載器負責(zé),過程見類加載
JVM類加載過程 & 雙親委派模型 聲明
文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處https://segmentfault.com/u/yzwall
類加載過程類加載機制:JVM將類描述數(shù)據(jù)從.class文件中加載到內(nèi)存,并對數(shù)據(jù)進行,解析和初始化,最終形成被JVM直接使用的Java類型。
——《深入理解Java虛擬機 JVM高級特性與最佳實踐》
加載:加載階段由類加載器負責(zé),過程見類加載器;
驗證:驗證階段負責(zé)驗證類數(shù)據(jù)信息是否符合JVM規(guī)范,是否是一個有效的字節(jié)碼文件;
準備:準備階段負責(zé)為類中static變量分配空間,并初始化(與程序無關(guān),系統(tǒng)初始化);
解析:解析階段負責(zé)將常亮池中所有符號引用轉(zhuǎn)換為直接引用;
初始化:初始化階段負責(zé)將所有static域按照程序指定操作對應(yīng)執(zhí)行(賦值static變量,執(zhí)行static塊)
上述階段通常都是交叉混合允許,沒有嚴格的先后執(zhí)行順序;
類加載器類加載器的主要任務(wù):是類加載過程中的加載操作:根據(jù)一個類的全限定名讀取該類的二進制字節(jié)流到JVM內(nèi)部,然后轉(zhuǎn)換為一個對應(yīng)的java.lang.Class對象實例;
開發(fā)者可以通過編寫自定義類加載器來自定義類的加載規(guī)則
在HotSpot虛擬機中,Bootstrap ClassLoader用C++語言編寫并嵌入JVM內(nèi)部,主要負載加載JAVA_HOME/lib目錄中的所有類,或者加載由選項-Xbootcalsspath指定的路徑下的類;
拓展類加載器/ExtClasLoaderExtClassLoader繼承ClassLoader類,負載加載JAVA_HOME/lib/ext目錄中的所有類型,或者由參數(shù)-Xbootclasspath指定路徑中的所有類型;
應(yīng)用程序類加載器/AppClassLoaderExtClassLoader繼承ClassLoader類,負責(zé)加載用戶類路徑ClassPath下的所有類型,一般情況下為程序的默認類加載器;
自定義加載器Java虛擬機規(guī)范將所有繼承抽象類java.lang.ClassLoader的類加載器,定義為自定義類加載器;
雙親委派模型雙親委派過程:當(dāng)一個類加載器收到類加載任務(wù)時,立即將任務(wù)委派給它的父類加載器去執(zhí)行,直至委派給最頂層的啟動類加載器為止。如果父類加載器無法加載委派給它的類時,將類加載任務(wù)退回給它的下一級加載器去執(zhí)行;
除了啟動類加載器以外,每個類加載器擁有一個父類加載器,用戶的自定義類加載器的父類加載器是AppClassLoader;
雙親委派模型可以保證全限名指定的類,只被加載一次;
雙親委派模型不具有強制性約束,是Java設(shè)計者推薦的類加載器實現(xiàn)方式;
[1] 《Java虛擬機精講》
[2] 《深入理解Java虛擬機 JVM高級特性與最佳實踐》
[3] ??http://blog.csdn.net/zhangliangzi/article/details/51338291
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66994.html
摘要:如果需要支持類的動態(tài)加載或需要對編譯后的字節(jié)碼文件進行解密操作等,就需要與類加載器打交道了。雙親委派模型,雙親委派模型,約定類加載器的加載機制。任何之類的字節(jié)碼都無法調(diào)用方法,因為該方法只能在類加載的過程中由調(diào)用。 jvm系列 垃圾回收基礎(chǔ) JVM的編譯策略 GC的三大基礎(chǔ)算法 GC的三大高級算法 GC策略的評價指標 JVM信息查看 GC通用日志解讀 jvm的card table數(shù)據(jù)...
摘要:雙親委派模型中方法雙親委派是指如果一個類收到了類加載的請求,不會自己先嘗試加載,先找父類加載器去完成。當(dāng)頂層啟動類加載器表示無法加載這個類的時候,子類才會嘗試自己去加載。 類加載過程:加載、驗證(驗證階段作用是保證Class文件的字節(jié)流包含的信息符合JVM規(guī)范,不會給JVM造成危害)、準備(準備階段為變量分配內(nèi)存并設(shè)置類變量的初始化)、解析(解析過程是將常量池內(nèi)的符號引用替換成直接引用...
摘要:虛擬機為了保證一個類的方法在多線程環(huán)境中被正確地加鎖同步。但啟動類加載器不可能認識這些代碼。實現(xiàn)模塊化熱部署的關(guān)鍵則是它的自定義類加載器機制的實現(xiàn)。 概念區(qū)分:加載、類加載、類加載器 類加載是一個過程。 加載(Loading)是類加載這一個過程的階段。 類加載器是ClassLoader類或其子類。 本文中的類的描述都包括了類和接口的可能性,因為每個Class文件都有可能代表J...
摘要:驗證驗證是連接階段的第一步,這一階段的目的是為了確保文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機的要求,并且不會危害虛擬機自身的安全。字節(jié)碼驗證通過數(shù)據(jù)流和控制流分析,確定程序語義是合法的符合邏輯的。 看過這篇文章,大廠面試你「雙親委派模型」,硬氣的說一句,你怕啥? 讀該文章姿勢 打開手頭的 IDE,按照文章內(nèi)容及思路進行代碼跟蹤與思考 手頭沒有 IDE,先收藏,回頭看 (萬一哪次面試問...
摘要:學(xué)習(xí)能更深入的理解這門語言,能理解語言底層的執(zhí)行過程,深入到字節(jié)碼層次。 目錄 ? 前言 程序的運行 1.JVM類加載機制 ①一般在什么情況下會去加載一個類?也就是說,什么時候.class字節(jié)碼文件中加載這個類到JVM內(nèi)存里來? ②驗證、準備、初始化 ③初始化 2.類加載器和雙親委派機制 ...
閱讀 1690·2021-11-15 11:37
閱讀 3424·2021-09-28 09:44
閱讀 1678·2021-09-07 10:15
閱讀 2802·2021-09-03 10:39
閱讀 2698·2019-08-29 13:20
閱讀 1306·2019-08-29 12:51
閱讀 2215·2019-08-26 13:44
閱讀 2137·2019-08-23 18:02