成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java類加載器:坑爹是我的特色

開發 后端
今天的主角是「在日常開發中,存在感非常低的類加載器」,眾所周知大佬除了頭發比較少,還非常低調,如果想和大佬交朋友,那一定要先認識大佬,下面阿星來帶大家認識一下類加載器(本文不涉及源碼)。

[[398022]]

本文轉載自微信公眾號「程序猿阿星」,作者程序猿阿星。轉載本文請聯系程序猿阿星公眾號。

 大家好,我是頭發還很多的阿星

今天的主角是「在日常開發中,存在感非常低的類加載器」,眾所周知大佬除了頭發比較少,還非常低調,如果想和大佬交朋友,那一定要先認識大佬,下面阿星來帶大家認識一下類加載器(本文不涉及源碼)。

什么是類加載器

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

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

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

類加載過程

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

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

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

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

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

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

實力坑爹

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

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

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

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

雙親委派模式的原理也十分簡單,類加載器收到類加載請求,會委托給父類加載器去執行,父類加載器還存在其父類加載器,則進一步向上委托,依次遞歸,直到頂層類加載器,如果頂層類加載器加載到該類,就成功返回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、分布式、數據庫等精品原創文章,2021,與您在 Be Better 的路上共同成長!

 

責任編輯:武曉燕 來源: 程序猿阿星
相關推薦

2019-04-09 09:50:34

2020-05-21 13:45:03

Java坑爹編程語言

2025-06-26 03:33:00

2012-02-09 10:31:17

Java

2017-08-29 08:35:01

好技術淘汰產品

2011-12-15 09:45:21

PhoneGap

2011-12-22 19:57:38

PhoneGap

2021-07-05 06:51:43

Java機制類加載器

2018-01-11 16:30:03

數據庫MySQLSQL

2025-07-01 07:41:37

Java類加載器雙親委派

2019-06-13 16:30:37

代碼Java編程語言

2023-12-06 12:11:43

類加載器雙親委派模型

2021-01-13 09:14:00

緩存穿透RPC

2012-05-07 13:52:45

PHP

2020-07-23 07:26:49

JVM類加載器

2010-03-16 14:58:15

Java類加載器

2019-12-09 15:08:30

JavaTomcatWeb

2011-09-08 17:31:29

Steply社交圖片

2011-02-25 09:23:00

Java類加載器

2013-12-23 09:44:43

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久国产精品 | 99re视频在线观看 | 午夜激情小视频 | 日韩精品一区二区三区久久 | 久久一区精品 | 黑人精品xxx一区一二区 | 国产你懂的在线观看 | 欧美激情 一区 | 国产一级一片免费播放 | 国产精品久久久久久久一区二区 | a级网站| 精品产国自在拍 | 精品国产欧美一区二区三区成人 | 精品视频一区二区 | 黄页网址在线观看 | 免费 视频 1级 | 97人人干 | 久久久久无码国产精品一区 | 国产免费一区二区三区 | 婷婷色综合 | 午夜影院普通用户体验区 | 日韩av电影院| 国产精品成人国产乱一区 | 久久精品国产亚洲一区二区 | 亚洲久久一区 | 激情欧美一区二区三区中文字幕 | 亚洲精品二三区 | 天天草天天爱 | 国产h视频 | 国产精品中文字幕在线 | 日韩一区二区不卡 | 黄色网址在线免费观看 | 国产精品免费观看 | 久久免费资源 | 成人精品一区二区三区中文字幕 | 嫩草研究影院 | 久久久蜜臀国产一区二区 | 你懂的免费在线 | 国产精品毛片无码 | 亚洲精品久久久久久一区二区 | 欧美freesex黑人又粗又大 |