国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JVM類加載&雙親委派-JVM(二)

這篇具有很好參考價(jià)值的文章主要介紹了JVM類加載&雙親委派-JVM(二)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

上篇文章說了java類的加載,驗(yàn)證、準(zhǔn)備、解析、初始化。類的初始化必須是類加載完才執(zhí)行,所以類的構(gòu)造方法初始化是在靜態(tài)方法之后執(zhí)行。

JVM類加載機(jī)制-JVM(一)

一、類加載和雙親委派機(jī)制

前面類加載主要通過類加載器實(shí)現(xiàn),類加載器有這幾種:

  1. 引導(dǎo)類加載器:負(fù)責(zé)加載支撐JVM運(yùn)行的位于JRE的lib目錄下核心類庫,比如chaset.jar和rt.jar等。(c++實(shí)現(xiàn))
  2. 擴(kuò)展類加載器:負(fù)責(zé)加載支撐JVM運(yùn)行的位于jre的lib目錄下的ext擴(kuò)展目錄中的jar類包。
  3. 應(yīng)用程序加載器:負(fù)責(zé)加載classPath路徑下的類包,主要加載自己寫的類。
  4. 自定義加載器:負(fù)責(zé)加載用戶自定義路徑下的類包。

JVM類加載&雙親委派-JVM(二)

?JVM類加載&雙親委派-JVM(二)

?

由上面代碼執(zhí)行的結(jié)果可以看到:

為什么第一個(gè)打印的是null呢,因?yàn)橐龑?dǎo)類加載器是c++實(shí)現(xiàn)的,java不會(huì)顯示。

同理parentBootStrap就是加載器就是基類加載器,也是null。它的子類是ext加載器,ext的子類是app加載器,可以通過getSystemClassLoader來獲取到。

為什么appClassLoader明明是最子類,而它會(huì)打印所有的包呢?

這就是雙親委派設(shè)置導(dǎo)致如此的,因?yàn)槊看渭虞d會(huì)從他的父加載器去加載,當(dāng)bootStrap從核心類庫加載不到,才會(huì)依次讓子加載器嘗試加載。

JVM類加載&雙親委派-JVM(二)

?

Launcher類最核心的代碼是這兩塊

getExtClassLoader() 和 getAppClassLoader()

ExtClassLoader是構(gòu)造擴(kuò)展類加載器,構(gòu)造過程中將其父加載器設(shè)置為null。

getAppClassLoader構(gòu)造應(yīng)用類加載器,構(gòu)造過程中將父加載器設(shè)置為ExtClassLoader。

JVM類加載&雙親委派-JVM(二)

?JVM類加載&雙親委派-JVM(二)

需要設(shè)置一下,equals我們自己的類,就可以只看我們自己的斷點(diǎn)。

當(dāng)我們運(yùn)行昨天寫的代碼,斷點(diǎn)就會(huì)走到loadClass這里,點(diǎn)進(jìn)去他的super。

這里的findLoaderClass代表如果找到就直接返回。

這里第一次進(jìn)來肯定是null,所以判斷他的parent。

我們這里的this指的是appClassLoader,

所以他的父加載器我們之前看了是ExtClassLoader。

這時(shí)候遞歸調(diào)用這個(gè)loadClass,這時(shí)候則是ExtClassLoader調(diào)用。

這時(shí)候ExtClassLoader的父加載器是null,這時(shí)候走下面findBootstrap引導(dǎo)類加載器。

這時(shí)bootStrap類加載器肯定返回null。

于是開始進(jìn)入findClass。

這里的findClass則是會(huì)調(diào)用URLClassLoader里的findClass方法。

這里會(huì)嘗試加載又會(huì)回到appClassLoader。文章來源地址http://www.zghlxwxcb.cn/news/detail-510796.html

到了這里,關(guān)于JVM類加載&雙親委派-JVM(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【JAVA基礎(chǔ)】JVM之類加載--雙親委派機(jī)制

    【JAVA基礎(chǔ)】JVM之類加載--雙親委派機(jī)制

    1. 類加載的過程 描述: 我們寫的 .java 文件通過編譯成字節(jié)碼文件 .class 文件,然后再通過我們的類加載器:Class Loader,反射以后,類模板存在方法區(qū),把實(shí)例化的對象存在堆里; 看圖: 對象的hashcode值 解釋: 從圖中我們可以看出,從同一個(gè)類模板new出來三個(gè)對象(實(shí)例化

    2024年01月23日
    瀏覽(26)
  • JVM(類的加載與ClassLoader、雙親委派機(jī)制)

    JVM(類的加載與ClassLoader、雙親委派機(jī)制)

    類在內(nèi)存中完整的生命周期: 加載--使用--卸載 。其中加載過程又分為: 裝載、鏈接、初始化 三個(gè)階段。 當(dāng)程序主動(dòng)使用某個(gè)類時(shí),如果該類還未被加載到內(nèi)存中,系統(tǒng)會(huì)通過加載、鏈接、初始化三個(gè)步驟來對該類進(jìn)行初始化。如果沒有意外,JVM將會(huì)連續(xù)完成這三個(gè)步驟,

    2024年02月03日
    瀏覽(31)
  • JVM的類加載的過程以及雙親委派模型

    JVM的類加載的過程以及雙親委派模型

    目錄 1、加載 (加載字節(jié)碼文件,生成.class對象) 2、驗(yàn)證(驗(yàn)證Class文件是否符合規(guī)范)? 3、準(zhǔn)備 (為靜態(tài)變量分配內(nèi)存并設(shè)置變量初始值) 4、解析(初始化常量池中的一些常量)? 5、初始化(初始化對象,并為靜態(tài)變量賦值)? 總結(jié): 雙親委派模型:?? JVM的類加載器

    2023年04月20日
    瀏覽(34)
  • 深度解析JVM類加載器與雙親委派模型

    深度解析JVM類加載器與雙親委派模型

    Java虛擬機(jī)(JVM)是Java程序運(yùn)行的核心,其中類加載器和雙親委派模型是JVM的重要組成部分。本文將深入討論這兩個(gè)概念,并解釋它們在實(shí)際開發(fā)中的應(yīng)用。 1. 什么是類加載器? 類加載器是JVM的一部分,負(fù)責(zé)加載Java類的字節(jié)碼文件。Java應(yīng)用程序中的每個(gè)類都必須由類加載器

    2024年01月17日
    瀏覽(112)
  • 【JVM從入門到實(shí)戰(zhàn)】(六)類加載器的雙親委派機(jī)制

    【JVM從入門到實(shí)戰(zhàn)】(六)類加載器的雙親委派機(jī)制

    在Java中如何使用代碼的方式去主動(dòng)加載一個(gè)類呢? 方式1:使用Class.forName方法,使用當(dāng)前類的類加載器去加載指定的類。 方式2:獲取到類加載器,通過類加載器的loadClass方法指定某個(gè)類加載器加載。 雙親委派機(jī)制: 自底向上查找是否加載過,再由頂向下進(jìn)行加載 面試題:

    2024年02月04日
    瀏覽(26)
  • [JVM] 3. 類加載子系統(tǒng)(2)-- 類加載器、雙親委派機(jī)制(JDK1.8及之前)及其他

    [JVM] 3. 類加載子系統(tǒng)(2)-- 類加載器、雙親委派機(jī)制(JDK1.8及之前)及其他

    JDK1.8及之前和JDK9及之后的雙親委派模型是不一樣的,這里學(xué)習(xí)了1.8及以前的雙親委派模型,記錄筆記 1.8之前主要是這幾種類加載器: 負(fù)責(zé)將存放在 JAVA_HOMElib 目錄中的,或者被-Xbootclasspath參數(shù)所指定的路徑中的,并且是虛擬機(jī)識(shí)別的(僅按照文件名,如rt.jar)類庫加載到虛

    2024年02月16日
    瀏覽(28)
  • 【JVM】打破雙親委派機(jī)制

    【JVM】打破雙親委派機(jī)制

    ? ???????個(gè)人主頁:五敷有你? ? ?? ??? 系列專欄:JVM ?? 穩(wěn)中求進(jìn),曬太陽 ClassLoader包含了四個(gè)核心方法 雙親委派機(jī)制核心代碼閱讀 閱讀雙親委派機(jī)制的核心代碼,分析如何通過自定義類加載器打破雙親委派機(jī)制。 打破雙親委派機(jī)制的核心就是講下面的代碼重寫

    2024年02月19日
    瀏覽(29)
  • 【jvm】雙親委派機(jī)制

    【jvm】雙親委派機(jī)制

    一、說明 1.java虛擬機(jī)對class文件采用的是按需加載的方式,當(dāng)需要使用該類時(shí)才會(huì)將它的class文件加載到內(nèi)存生成class對象 2.加載某個(gè)類的class文件時(shí),java虛擬機(jī)采用雙親委派模式,即把請求交給由父類處理,是一種任務(wù)委派模式 3.jvm中表示兩個(gè)class對象是否為同一個(gè)類存在兩

    2024年02月11日
    瀏覽(59)
  • 類加載 - 雙親委派機(jī)制詳解

    類加載 - 雙親委派機(jī)制詳解

    啟動(dòng)類加載器(Bootstrap Class Loader):它是Java虛擬機(jī)的一部分,負(fù)責(zé)加載Java核心類庫,如java.lang包中的類。它是最頂層的類加載器,由C++實(shí)現(xiàn),不是Java類。 擴(kuò)展類加載器(Extension Class Loader):它負(fù)責(zé)加載Java的擴(kuò)展類庫,位于JRE的lib/ext目錄下。它是由Java編寫的類加載器,是

    2024年02月12日
    瀏覽(27)
  • java八股文面試[JVM]——雙親委派模型

    java八股文面試[JVM]——雙親委派模型

    1.當(dāng) AppClassLoader 去加載一個(gè)class時(shí),它首先不會(huì)自己去嘗試加載這個(gè)類,而是把類加載請求委托給父加載器 ExtClassLoader 去完成。 2.當(dāng)ExtClassLoader去加載一個(gè)class時(shí),它首先也不會(huì)去嘗試加載這個(gè)類,而是把類加載請求委托給父加載器 BootstrapClassLoader 去完成。 3.如果BootstrapClas

    2024年02月11日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包