您好,登錄后才能下訂單哦!
本篇內容主要講解“JVM類的加載過程和雙親委派模型案例分享”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JVM類的加載過程和雙親委派模型案例分享”吧!
類加載過程為 JVM 將類描述數據從 .class 文件中加載到內存,并對數據進行解析和初始化,最終形成被JVM直接使用的 Java 類型。包含:
?加載:獲取該類的二進制字節流,將字節流代表的靜態存儲結構轉化為方法區的運行時數據結構,并在內存生成代表該類的 java.lang.Object 對象作為方法區該類的訪問入口?驗證:確保 Class 文件的字節流中包含的信息符號當前虛擬機的要求(文件格式驗證、元數據驗證、字節碼驗證、符號引用驗證)?準備:為類變量分配內存并設置類變量初始值?解析:將常量池內的符號引用替換為直接引用?初始化:執行類構造器<client>
類加載過程中的加載操作由類加載去完成。類加載器分為:
?啟動類加載器/Bootstrap ClassLoader:負責加載 JAVA_HOME/lib 目錄中的所有類,或者加載由選項 -Xbootcalsspath 指定的路徑下的類;?擴展類加載器/ExtClasLoader:負責加載 JAVA_HOME/lib/ext 目錄中的所有類型,或者由參數-Xbootclasspath指定路徑中的所有類型;?應用程序類加載器/AppClassLoader:負責加載用戶類路徑 ClassPath 下的所有類型?自定義加載器:所有繼承抽象類 java.lang.ClassLoader 的類加載器
雙親委派過程:當一個類加載器收到類加載任務時,立即將任務委派給它的父類加載器去執行,直至委派給最頂層的啟動類加載器為止。如果父類加載器無法加載委派給它的類時,將類加載任務退回給它的下一級加載器去執行。
雙親委派模型最大的好處就是讓Java類同其類加載器一起具備了一種帶優先級的層次關系。舉個例子來說明下:比如我們要加載頂層的Java類——java.lang.Object類,無論我們用哪個類加載器去加載Object類,這個加載請求最終都會委托給啟動類加載器(Bootstrap ClassLoader),這樣就保證了所有加載器加載的Object類都是同一個類。如果沒有雙親委派模型,就會出現 Wupx::Object 和 Huyx::Object 這樣兩個不同的Object類。
java.lang.ClassLoader 的 loadClass() 方法
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { synchronized (getClassLoadingLock(name)) { // First, check if the class has already been loaded Class<?> c = findLoadedClass(name); if (c == null) { long t0 = System.nanoTime(); try { if (parent != null) { c = parent.loadClass(name, false); } else { c = findBootstrapClassOrNull(name); } } catch (ClassNotFoundException e) { // ClassNotFoundException thrown if class not found // from the non-null parent class loader } if (c == null) { // If still not found, then invoke findClass in order // to find the class. long t1 = System.nanoTime(); c = findClass(name); // this is the defining class loader; record the stats sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0); sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1); sun.misc.PerfCounter.getFindClasses().increment(); } } if (resolve) { resolveClass(c); } return c; } }
到此,相信大家對“JVM類的加載過程和雙親委派模型案例分享”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。