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

溫馨提示×

溫馨提示×

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

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

Java類加載器的特色是什么

發布時間:2021-06-28 16:26:30 來源:億速云 閱讀:168 作者:chen 欄目:編程語言

這篇文章主要介紹“Java類加載器的特色是什么”,在日常操作中,相信很多人在Java類加載器的特色是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java類加載器的特色是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

什么是類加載器

我們平時寫了那么多的Java代碼,卻不知Java類的加載過程,豈不是很尷尬,為了打破尷尬,阿星得從Java類說起。

我們編寫的Java類也就是.java文件,通過Java編譯器編譯成.class文件,.class文件中保存著Java代碼轉換后的虛擬機指令。

Java類加載器的特色是什么

當程序使用某個Java類時,JVM虛擬機會加載它的.class文件到虛擬機的內存中,負責加載工作的就是類加載器。

類加載過程

其實類加載器和日常生活中坐地鐵過安檢是一樣的道理,不信你看下面的圖

Java類加載器的特色是什么

安檢要經過一系列的檢查過程,目的是讓進入地鐵站的人群符合乘坐標準,比如你不能感冒,不能帶威脅人生安全的物品等。

同樣類加載也要經過一系列檢查過程,這個過程稱為類加載過程。

類加載過程分為加載、驗證、準備、解析、初始化,下圖是對類加載過程簡單的介紹。

Java類加載器的特色是什么

類加載過程不是本文的重點,如果對這塊有興趣深入研究的伙伴可以去自行百度或google。

下面要說說本文的重點,雙親委派模式

實力坑爹

雙親委派機制有點像實力坑爹,出了什么事情都讓爹去擦屁股,爹解決不了,自己才承擔。

JVM虛擬機提供了3種類加載器,它們分別是啟動類加載器(Bootstrap)、擴展類加載器(Extension)、系統類加載器(System)。

每個類加載器都有明確的加載范圍:

  • 啟動類加載器(Bootstrap):加載

    /lib路徑下的核心類庫
  • 擴展類加載器(Extension):加載

    /lib/extl路徑下的
  • 系統類加載器(System):加載系統類路徑classpath,也就是我們經常用到的classpath路徑,一般情況該類加載器是程序中默認的類加載器

Java類加載器的特色是什么

雙親委派模式的原理也十分簡單,類加載器收到類加載請求,會委托給父類加載器去執行,父類加載器還存在其父類加載器,則進一步向上委托,依次遞歸,直到頂層類加載器,如果頂層類加載器加載到該類,就成功返回class對象,否則委托給下級類加載器去執行,依次遞歸(此處的父子關系并非通常所說的繼承關系,而是采用組合關系來實現)。

用大白話來說就是,每個兒子都很懶,有事就丟給爹去干,直到爹說這件事我也干不了,兒子自己再想辦法完成。

雙親委派模式是為了避免重復加載和核心類篡改。

特殊需求

在日常開發中,我們可能會有特殊的業務需求,可能就需要使用到自定義類加載器,該加載器的上級一定是系統類加載器。

你們想要的特殊需求

  • 資源隔離

web容器可能需要部署兩個應用程序,不同的應用程序可能會依賴同一個第三方類庫的不同版本,因此要保證每個應用程序的類庫都是獨立的,相互隔離

web容器有自己依賴的類庫,不能與應用程序的類庫混淆,基于安全考慮,應該讓容器的類庫和程序的類庫隔離

  • 加密保護

    • 公司的一些核心類庫,可能會把字節碼加密,這樣加載類的時候就必須對字節碼進行解密

  • 其他來源加載類

    • 字節碼是放在數據庫、硬盤其他路徑、甚至是在云端

  • 類重新加載

    • JVM中類對象的唯一性:類加載器實例+完整類名

    • 程序運行中,類內容發生變化,創建自定義加載器實例重新加載類,達到的熱部署效果。

這里大家有個概念,理解下就夠了,想深入探索就需要涉及源碼分析,如果大伙有興趣,評論區留言,阿星后續單獨補一篇源碼分析~

強大的父親

有些爹的實力恐怖如斯,為了啥事都能幫后代處理好,直接破壞雙親委派模式,深受孩兒們的喜愛。

Java應用中存在著很多服務提供者接口(Service Provider  Interface,SPI),這些接口允許第三方為它們提供實現,如常見的SPI有JDBC、JNDI等,這些SPI的接口屬于Java核心庫,一般存在rt.jar包中,由啟動類加載器(Bootstrap)加載,而SPI的第三方實現代碼則是作為Java應用所依賴的jar包被存放在classpath路徑下。

由于SPI接口中的代碼需要加載第三方實現類并調用其相關函數,但SPI的核心接口類是由啟動類加載器(Bootstrap)加載的,Bootstrap加載器無法直接加載SPI的實現類。

在這種情況下,我們就需要一種特殊的類加載器來加載第三方的類庫,它就是線程上下文類加載器,線程的上下文類加載器默認設置的就是系統類加載器(System)。

Java類加載器的特色是什么

到此,關于“Java類加載器的特色是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

松潘县| 辽源市| 玛多县| 万山特区| 襄垣县| 金门县| 平原县| 确山县| 抚远县| 广德县| 定兴县| 绥德县| 郑州市| 喀喇| 古田县| 时尚| 朝阳市| 永寿县| 建德市| 大竹县| 高邑县| 鹤峰县| 南充市| 普兰县| 宜兴市| 内江市| 乌什县| 多伦县| 松江区| 宁化县| 阿城市| 子长县| 凯里市| 苍溪县| 潼关县| 施甸县| 湖北省| 梅河口市| 安国市| 景宁| 富宁县|