日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

随笔18 java中的类加载器

發布時間:2025/6/17 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随笔18 java中的类加载器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類的加載是由類加載器完成的,類加載器包括:根加載器(?BootStrap?)、擴展加載器(?Extension?)、系統加載器(?System?)和用戶自定義類加載器(?java.lang.ClassLoader?的子類)。從?Java 2?(?JDK 1.2?)開始,類加載過程采取了父親委托機制(PDM?)。?PDM?更好的保證了?Java?平臺的安全性,在該機制中,?JVM?自帶的?Bootstrap?是根加載器,其他的加載器都有且僅有一個父類加載器。類的加載首先請求父類加載器加載,父類加載器無能為力時才由其子類加載器自行加載。?JVM?不會向?Java?程序提供對?Bootstrap?的引用。

1)Bootstrap ClassLoader 負責加載$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++實現,不是ClassLoader子類 2)Extension ClassLoader 負責加載java平臺中擴展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包 3)App ClassLoader 負責記載classpath中指定的jar包及目錄中class 4)Custom ClassLoader 屬于應用程序根據自身需要自定義的ClassLoader,如tomcat、jboss都會根據j2ee規范自行實現ClassLoader 加載過程中會先檢查類是否被已加載,檢查順序是自底向上,從Custom ClassLoader到BootStrap ClassLoader逐層檢查,只要某個classloader已加載就視為已加載此類,保證此類只所有ClassLoader加載一次。而加載的順序是自頂向下,也就是由上層來逐層嘗試加載此類。 比較兩個類是否相等,只有這兩個類是由同一個類加載器加載才有意義。否則,即使這兩個類是來源于同一個Class文件,只要加載它們的類加載器不同,那么這兩個類必定不相等。

1.?什么是類加載器?

把類加載的過程放到Java虛擬機外部去實現,讓應用程序決定如何去獲取所需要的類。實現這個動作的代碼模塊稱為“類加載器”。??

2.?有哪些類加載器,分別加載哪些類

類加載器按照層次,從頂層到底層,分為以下三種:?
(1)啟動類加載器?:?它用來加載?Java?的核心庫,比如String、System這些類?
(2)擴展類加載器?:?它用來加載?Java?的擴展庫。

(3)?應用程序類加載器?:?負責加載用戶類路徑上所指定的類庫,一般來說,Java?應用的類都是由它來完成加載的。

3.?雙親委派模型

我們應用程序都是由以上三種類加載器互相配合進行加載的,還可以加入自己定義的類加載器。稱為?類加載器的雙親委派模型?,這里類加載器之間的父子關系一般不會以繼承的關系來實現,而是都使用?組合關系?來復用父加載器的。

4.?雙親委托模型的工作原理

是當一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每一個層次的類加載都是如此,因此所有的加載請求最終都應該傳送到頂層的啟動類加載器中,只有當父加載器反饋自己無法加載這個加載請求的時候,子加載器才會嘗試自己去加載。

5.?使用雙親委派模型好處?(原因)

第一:可以避免重復加載,當父親已經加載了該類的時候,子類不需要再次加載。

第二:考慮到安全因素,如果不使用這種委托模式,那我們就可以隨時使用自定義的String來動態替代java核心api中定義類型,這樣會存在非常大的安全隱患,而雙親委托的方式,就可以避免這種情況,因為String已經在啟動時被加載,所以用戶自定義類是無法加載一個自定義的類裝載器。

轉載于:https://www.cnblogs.com/lyr612556/p/7820172.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

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

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