Java虛擬機之類加載器
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-05-02 17:51:23
之前我們簡單的介紹了一下關(guān)于Java類的加載機制JAVA虛擬機之類的前世今生——類加載流程,現(xiàn)在我們再補充介紹一下JVM進(jìn)行類加載的類加載器是如何使用的。
之前我們簡單的介紹了一下關(guān)于Java類的加載機制JAVA虛擬機之類的前世今生——類加載流程,現(xiàn)在我們再補充介紹一下JVM進(jìn)行類加載的類加載器是如何使用的。
<
div> Java類加載器的特點
類加載器的作用是通過一個類的全限定名來獲取描述此類的二進(jìn)制字節(jié)流。通俗簡單點可以理解為將類的.class文件中的二進(jìn)制數(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)加載器。
以上就是虛擬機加載器的使用方式。