日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jvm类加载器以及双亲委派

發布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jvm类加载器以及双亲委派 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先來了解幾個概念:

類加載:

??? 概念:虛擬機把描述類的數據從Class文件加載到內存,并對數據進行校驗--轉換解析--初始化,最終形成能被java虛擬機直接使用的java類型,就是jvm的類加載機制。

??? 類加載包含了以下過程:加載--驗證--準備--解析--初始化--使用--卸載

?

類加載器:

??? 首先,什么是類加載器?

概念:把類加載階段中"通過一個類的全限定名來獲取描述此類的二進制流"這個動作放到jvm外部去實現,以便讓應用程序自己決定如何去獲取所需要的類。實現這個動作的代碼模塊被稱為"類加載器"。

?

分類:(針對hot spot而言,因為MRP,maxine的虛擬機完全是由java實現)

站在java虛擬機的角度上講,只存在兩種不同的類加載器。啟動類加載器 和 其他類加載器。

??? 啟動類加載器:由c++實現,是虛擬機自身的一部分.

??? 其他類加載器:由java實現,獨立于虛擬機外部,全繼承于抽象類java.lang.ClassLoader.

站在java開發人員的角度上講? ,分為三種

? *啟動類加載器(BootStrap ClassLoader):? 前面已經提到,主要加載<JAVA_HOME>/lib目錄中 ,或被-Xbootclasspath參數指定路徑中的jar包。

??*擴展類加載器(Extension ClassLoader):由sun.misc.Launcher$ExtClassLoader來實現。主要加載<JAVA_HOME>/lib/ext 目錄中 ,或被java.ext.dirs系統變量指定路徑中所有類庫。

? *應用程序類加載器(Application ClassLoader):由sun.misc.Launcher$AppClassLoader來實現。由于這個類加載器是ClassLoader中getSystemClassLoader()方法返回值,所以也叫系統類加載器。負責加載用戶類路徑上(ClassPath)指定的類庫,是開發過程中默認的加載器,開發者可直接使用。

說到這里,不得不提一下"雙親委派模型(Parent Delegation Model)"。如上圖。

?

雙親委派模型:描述類加載器之間的層次關系的就是雙親委派模型。

雙親委派模型要求出頂層的 啟動類加載器 外,其余類加載器都應有自己的父類加載器。

加載器之間的父子關系不是靠繼承的關系實現,是使用組合關系的關系來復用父類加載器的代碼。

?

雙親委派模型工作過程:若一個類加載器收到類加載請求,他首先不會自己嘗試去加載這個類,而是把這個請求委派給父類加載器去完成,每一層類加載器都是如此,所以所有請求都會傳送到頂層的BootStrap ClassLoader,只有當父類加載器反饋自己無法完成這個加載請求(它的搜索范圍沒找到),子加載器才會自己嘗試去加載。

?

使用雙親委派模型好處:

java類以及它的類加載器一起具備了一種帶有優先級的層次關系。如 java.lang.Object(它在rt.jar之中)。

??? 首先我們要知道一點,同一個類 被不同的 類加載器 加載成兩個類之后,這兩個類是不同的。

如果java.lang.Object類被不同的類加載器加載很多次,jvm中存在了多個不同的Object類,那么java類型體系中最基礎的行為也無從保證,應用程序會一片混亂(we know,all the class extends from java.lang.Object,如果Object存在多個品種,那絕對是災難)。

??? 相反,使用了雙親委派模型,無論哪個類加載器去加載,都會委派到BoorStrap ClassLoader進行加載,保證了Object在各個類加載器環境中,都是同一個類。

?

? 再提一點雙親委派模型的工作機制,以類 A 為例,A如果以Application ClassLoader方式來加載,Application ClassLoader委派給Extension ClassLoader,再到BootStrap ClassLoader.

然而,BootStrap ClassLoader管理范圍內(<JAVA_HOME>/lib目錄中 ,或-Xbootclasspath參數指定路徑中的jar包)沒查到類A,那么就讓最初請求的類加載器,Application ClassLoader來加載

?

at last,提一點,雙親委派模型 在jvm成長史上被重大破壞過三次,但是 雙親委派模型確實不錯,還是像小強一樣的活了下來

轉載于:https://www.cnblogs.com/xiaoliu66007/p/3376219.html

總結

以上是生活随笔為你收集整理的jvm类加载器以及双亲委派的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。