91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

青田县| 福清市| 榆中县| 醴陵市| 哈密市| 庆阳市| 论坛| 山东| 金堂县| 新沂市| 平谷区| 宁蒗| 金平| 西贡区| 绥阳县| 蕉岭县| 济南市| 绥棱县| 昌平区| 色达县| 呈贡县| 东城区| 东宁县| 高邮市| 庆阳市| 大连市| 都匀市| 涟水县| 明溪县| 红河县| 昌平区| 顺昌县| 霍山县| 云霄县| 榆中县| 天祝| 子长县| 亚东县| 东光县| 满洲里市| 沙湾县|