×

Java虛擬機(jī)之類加載器

  • 作者:新網(wǎng)
  • 來(lái)源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-02 17:51:23

之前我們簡(jiǎn)單的介紹了一下關(guān)于Java類的加載機(jī)制JAVA虛擬機(jī)之類的前世今生——類加載流程,現(xiàn)在我們?cè)傺a(bǔ)充介紹一下JVM進(jìn)行類加載的類加載器是如何使用的。

   之前我們簡(jiǎn)單的介紹了一下關(guān)于Java類的加載機(jī)制JAVA虛擬機(jī)之類的前世今生——類加載流程,現(xiàn)在我們?cè)傺a(bǔ)充介紹一下JVM進(jìn)行類加載的類加載器是如何使用的。

t016d9ff5f00f9a0ff2.jpg

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

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading