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