百度安裝app東莞seo排名公司
一、目標(biāo)
類加載器(ClassLoader)是Java虛擬機(jī)(JVM)的一部分,用于加載Java類文件到內(nèi)存中,并生成對應(yīng)的Class對象。類加載器負(fù)責(zé)在運(yùn)行時(shí)查找和加載類文件,為Java程序提供動(dòng)態(tài)加載和運(yùn)行時(shí)擴(kuò)展的功能。
二、類型
2.1、啟動(dòng)類加載器(Bootstrap ClassLoader)
也稱為根加載器,它是JVM內(nèi)嵌的加載器,負(fù)責(zé)加載Java核心類庫(如java.lang包中的類)和其他需要在JVM啟動(dòng)時(shí)就被加載的類。它是所有其他類加載器的父加載器。由于是用C++實(shí)現(xiàn)的,因此在Java代碼中無法直接獲取到啟動(dòng)類加載器的引用。
2.2、擴(kuò)展類加載器(Extension ClassLoader):
它是由sun.misc.Launcher$ExtClassLoader實(shí)現(xiàn)的,負(fù)責(zé)加載Java的擴(kuò)展類庫(如javax包中的類)。它是由啟動(dòng)類加載器加載的,并且是應(yīng)用類加載器的父加載器。
2.3、應(yīng)用類加載器(Application ClassLoader)
也稱為系統(tǒng)類加載器,它是由sun.misc.Launcher$AppClassLoader實(shí)現(xiàn)的,負(fù)責(zé)加載應(yīng)用程序的類。應(yīng)用類加載器是用戶自定義的類加載器的默認(rèn)父加載器。
三、加載策略
3.1、問題
解決類的加載順序、一致性、可靠性、唯一性等;
3.2、雙親委派機(jī)制
雙親委派機(jī)制(Delegation Model)是Java類加載器的一種加載策略,它定義了類加載器在加載類時(shí)的行為和優(yōu)先級。
雙親委派機(jī)制的基本思想是:當(dāng)一個(gè)類加載器需要加載一個(gè)類時(shí),它首先將加載請求委派給父類加載器,只有當(dāng)父類加載器無法加載該類時(shí),才由自身加載器進(jìn)行加載。這個(gè)過程會一直循環(huán),直到頂層的啟動(dòng)類加載器。如果所有的父類加載器都無法加載該類,最終由子類加載器加載。
3.3、優(yōu)勢
1、避免類的重復(fù)加載:每個(gè)類加載器都有自己的命名空間,當(dāng)父類加載器已經(jīng)加載了一個(gè)類,子類加載器無需重新加載,直接使用父類加載器加載的類,避免了重復(fù)加載。
2、提供類加載的安全性和一致性:通過雙親委派機(jī)制,類加載器會沿著加載鏈向上委派加載請求,保證了加載的類來自于同一個(gè)源,確保了類的安全性和一致性。
3、確保核心類的一致性:由啟動(dòng)類加載器加載的核心類庫是Java虛擬機(jī)的一部分,能夠保證在不同的Java應(yīng)用中,加載的核心類庫是一致的。
需要注意的是,雙親委派機(jī)制并不是強(qiáng)制性的,可以通過自定義類加載器繞過雙親委派機(jī)制,實(shí)現(xiàn)特定的加載邏輯,例如熱部署等需求。
雙親委派機(jī)制在Java中的應(yīng)用非常廣泛,不僅用于加載Java核心類庫,還用于加載應(yīng)用程序的類。它確保了類的加載按照優(yōu)先級和一致性進(jìn)行,提供了類加載的可靠性和安全性。