中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM類的加載過程和雙親委派模型案例分享

發布時間:2021-09-04 10:41:10 來源:億速云 閱讀:148 作者:chen 欄目:大數據

本篇內容主要講解“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 的類加載器

雙親委派模型

JVM類的加載過程和雙親委派模型案例分享

雙親委派過程:當一個類加載器收到類加載任務時,立即將任務委派給它的父類加載器去執行,直至委派給最頂層的啟動類加載器為止。如果父類加載器無法加載委派給它的類時,將類加載任務退回給它的下一級加載器去執行。

雙親委派模型最大的好處就是讓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類的加載過程和雙親委派模型案例分享”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

师宗县| 苏尼特右旗| 汝城县| 互助| 萝北县| 封开县| 洪湖市| 哈尔滨市| 象山县| 綦江县| 大城县| 宁乡县| 武清区| 东丰县| 获嘉县| 高州市| 远安县| 岑溪市| 资中县| 芦山县| 海晏县| 灵寿县| 曲阳县| 阿荣旗| 兰西县| 涞水县| 元朗区| 海口市| 东台市| 胶南市| 新沂市| 门头沟区| 五峰| 揭阳市| 法库县| 铜川市| 宜春市| 旬邑县| 额济纳旗| 当雄县| 庄河市|