Java虛擬機之類加載器
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-05-02 17:51:23
之前我們簡單的介紹了一下關(guān)于Java類的加載機制JAVA虛擬機之類的前世今生——類加載流程,現(xiàn)在我們再補充介紹一下JVM進行類加載的類加載器是如何使用的。
之前我們簡單的介紹了一下關(guān)于Java類的加載機制JAVA虛擬機之類的前世今生——類加載流程,現(xiàn)在我們再補充介紹一下JVM進行類加載的類加載器是如何使用的。
<
div> Java類加載器的特點
類加載器的作用是通過一個類的全限定名來獲取描述此類的二進制字節(jié)流。通俗簡單點可以理解為將類的.class文件中的二進制數(shù)據(jù)讀入到內(nèi)存中。同時要額外注意的是,類加載器不光是用于類的加載,同時也用于唯一確定一個類。換而言之,同一個類如果又不同的類加載器加載,那么這兩個類其實是不同的。
除此之外,我們還可以概括出類加載器的3個特性。委托性,可見性和單一性。
委托性:當(dāng)一個類加載器接收到了類加載請求,它首先把這個請求委托給他的父類加載器去完成,每個層次的類加載器都是如此,因此所有的加載請求都會被傳送到頂層的啟動類加載器中,只有當(dāng)父加載器無法加載這個類也即在該類加載器的加載范圍內(nèi)無這個類時,子加載器才會嘗試自己去加載。
可見性:子類的加載器可見父類加載器加載的類,而父類加載器看不到子類加載器所加載的類
單一性:一個類只會被加載一次
常用類加載器
從JVM的角度來看,只有兩種類加載器,一種是由C++編寫的啟動類加載器,其屬于虛擬機的一部分。一種是剩余其他所有類加載器。從開發(fā)人員的角度來看,又可以細(xì)分為4種類加載器,啟動類加載器,擴展類加載器,應(yīng)用程序類加載器,自定義類加載器。
啟動類加載器(Bootstrap ClassLoader):負(fù)責(zé)加載/lib目錄或-Xbootclasspath路徑下的并且是虛擬機識別的類庫。且該類加載器無法被Java程序直接引用。
擴展類加載器(Extension ClassLoader):負(fù)責(zé)加載/lib/ext或者
java.ext.dirs系統(tǒng)變量鎖指定的路徑下的類庫,可以被開發(fā)者直接使用
應(yīng)用程序類加載器(Application ClassLoader):負(fù)責(zé)加載ClassPath(用戶類路徑)所指定的類庫,該類加載器可以由getSystemClassLoader()方法獲得,所以也被稱為系統(tǒng)類加載器,開發(fā)者同樣可以直接使用,一般情況下該類加載器為程序中的默認(rèn)加載器。
以上就是虛擬機加載器的使用方式。