最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 類加載過程與類加載器詳細(xì)介紹

 更新時(shí)間:2022年07月31日 08:41:09   作者:樹獺叔叔  
這篇文章主要介紹了Java 類加載過程與類加載器詳細(xì)介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下

1. 類加載過程

加載

通過類的全限定名(包名 + 類名),獲取到類的.class文件,加載到元空間。

鏈接

  • 驗(yàn)證:檢驗(yàn).class文件的安全性
  • 準(zhǔn)備:為靜態(tài)類型變量分配內(nèi)存并設(shè)置默認(rèn)值
  • 解析:將常量池內(nèi)的符號(hào)引用轉(zhuǎn)換為直接引用,符號(hào)引用指向一個(gè)未被加載的類,或者未被加載類的字段或方法,那么解析將觸發(fā)這個(gè)類的加載

初始化

執(zhí)行類的構(gòu)造器方法init()的過程,若該類具有父類,jvm會(huì)保證父類的init先執(zhí)行,然后在執(zhí)行子類的init。

2. 類加載器

啟動(dòng)類加載器

啟動(dòng)類加載器是由C/C++語言實(shí)現(xiàn)的,用來加載Java核心類庫。啟動(dòng)類只加載包名為:java、javax、sun開頭的類

擴(kuò)展類加載器

父類加載器為啟動(dòng)類加載器加載以下兩個(gè)目錄中的類庫:

  • java.ext.dirs目錄
  • JDK安裝目錄:jre/lib/ext目錄

我們就可以將我們自己的包放在以上目錄下,就會(huì)自動(dòng)加載進(jìn)來了。

應(yīng)用類加載器

父類加載器為啟動(dòng)類加載器,負(fù)責(zé)加載環(huán)境變量classpath或者系統(tǒng)屬性java.class.path指定路徑下的類庫,是程序中默認(rèn)的類加載器,我們Java程序中的類,都是由它加載完成的。

自定義類加載器

繼承java.lang.ClassLoader類,重寫findClass()方法 。如果沒有太復(fù)雜的需求,可以直接繼承URLClassLoader類,重寫loadClass方法。

作用

  • 加密:Java代碼可以輕易的被反編譯,如果你需要把自己的代碼進(jìn)行加密以防止反編譯,可以先將編譯后的代碼用某種加密算法加密,類加密后就不能再用Java的ClassLoader去加載類了,這時(shí)就需要自定義ClassLoader在加載類的時(shí)候先解密類,然后再加載。
  • 從非標(biāo)準(zhǔn)的來源加載代碼:如果你的字節(jié)碼是放在數(shù)據(jù)庫、甚至是在云端,就可以自定義類加載器,從指定的來源加載類。

雙親委派模型

jvm對(duì)class文件采用的是按需加載的方式,當(dāng)需要使用該類時(shí),jvm才會(huì)將它的class文件加載到內(nèi)存中產(chǎn)生class對(duì)象。在加載類的時(shí)候,是采用的雙親委派機(jī)制。

  • 如果一個(gè)類加載器接收到了類加載的請(qǐng)求,它自己不會(huì)先去加載,會(huì)把這個(gè)請(qǐng)求委托給父類加載器去執(zhí)行。
  • 如果父類還存在父類加載器,則繼續(xù)向上委托,一直委托到啟動(dòng)類加載器:Bootstrap ClassLoader
  • 如果父類加載器可以完成加載任務(wù),就返回成功結(jié)果,如果父類加載失敗,就由子類自己去嘗試加載,如果子類加載失敗就會(huì)拋出ClassNotFoundException異常,這就是雙親委派模式

打破雙親委派模型

用途:

  • Java應(yīng)用中存在著很多服務(wù)提供者接口(Service Provider Interface,SPI),這些接口允許第三方為它們提供實(shí)現(xiàn),如常見的 SPI 有 JDBC、JNDI等,這些 SPI 的接口屬于 Java 核心庫,一般存在rt.jar包中,由Bootstrap類加載器加載。而Bootstrap類加載器無法直接加載SPI的實(shí)現(xiàn)類,所以需要反向委派給其他類加載器進(jìn)行加載
  • 在Tomcat服務(wù)器中,存在一個(gè)服務(wù)器運(yùn)行多個(gè)不同版本但同名服務(wù)的需求,所以需要打破雙親委派模型,加載多個(gè)同名類。

方法:

  • 使用上下文類加載器
  • 重寫loadClass方法

到此這篇關(guān)于Java 類加載過程與類加載器詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Java 類加載 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java使用htmlparser提取網(wǎng)頁純文本例子

    java使用htmlparser提取網(wǎng)頁純文本例子

    這篇文章主要介紹了java使用htmlparser提取網(wǎng)頁純文本例子,需要的朋友可以參考下
    2014-04-04
  • Apache Dubbo的SPI機(jī)制是如何實(shí)現(xiàn)的

    Apache Dubbo的SPI機(jī)制是如何實(shí)現(xiàn)的

    SPI全稱為Service Provider Interface,對(duì)應(yīng)中文為服務(wù)發(fā)現(xiàn)機(jī)制。SPI類似一種可插拔機(jī)制,首先需要定義一個(gè)接口或一個(gè)約定,然后不同的場景可以對(duì)其進(jìn)行實(shí)現(xiàn),調(diào)用方在使用的時(shí)候無需過多關(guān)注具體的實(shí)現(xiàn)細(xì)節(jié)。在Java中,SPI體現(xiàn)了面向接口編程的思想,滿足開閉設(shè)計(jì)原則。
    2021-06-06
  • Spring整合Mycat2的具體過程詳解

    Spring整合Mycat2的具體過程詳解

    這篇文章主要給大家介紹Springboot整合Mycat2的具體過程,文中有詳細(xì)的圖解過程,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)
    2023-05-05
  • java實(shí)現(xiàn)微信H5支付方法詳解

    java實(shí)現(xiàn)微信H5支付方法詳解

    本篇文章主要介紹了java實(shí)現(xiàn)微信H5支付方法詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)

    SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 深入理解java long 存儲(chǔ)時(shí)間戳

    深入理解java long 存儲(chǔ)時(shí)間戳

    存儲(chǔ)時(shí)間打算用時(shí)間戳來存儲(chǔ),打算用long類型來代表時(shí)間戳,這篇文章主要介紹了深入理解java long 存儲(chǔ)時(shí)間戳,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Intellij IDEA使用restclient測試的教程圖解

    Intellij IDEA使用restclient測試的教程圖解

    這篇文章主要介紹了Intellij IDEA使用restclient測試的教程圖解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java簡單計(jì)算器的實(shí)現(xiàn)

    Java簡單計(jì)算器的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java簡單計(jì)算器的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • gRPC實(shí)踐之proto及Maven插件概念及使用詳解

    gRPC實(shí)踐之proto及Maven插件概念及使用詳解

    這篇文章主要為大家介紹了gRPC實(shí)踐之proto及Maven插件概念及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案

    Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案

    這篇文章主要給大家介紹了關(guān)于Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案,這個(gè)異常是java.net包中的一部分,具體說它是類的一個(gè)實(shí)例,異常通常是由主機(jī)名無法解析為IP地址引起的,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

林西县| 当雄县| 吉水县| 襄垣县| 长海县| 浙江省| 台江县| 赣州市| 宝应县| 改则县| 纳雍县| 利辛县| 绥芬河市| 盘锦市| 嘉定区| 贵德县| 平利县| 文成县| 环江| 黎平县| 文水县| 贵定县| 交城县| 昭觉县| 高安市| 遵义市| 榆中县| 屯留县| 锦州市| 横峰县| 屯门区| 宜阳县| 永兴县| 松潘县| 拉萨市| 衡南县| 台山市| 桂林市| 循化| 文登市| 黔西县|