2020年面試題------JVM的三種類加載器介紹

        類經過java文件編碼成.class文件,通過、jvm虛擬機啓動時,會將.class文件拆分成四分五裂的,通過一個.class對象來調用它,這就是類加載器,併爲之生成的java.lang.Class對象 .

JVM中的類的加載器主要有三種:啓動類加載器,拓展類加載器,應用類加載器。

  • (引導類)啓動類加載器(Bootstrap classLoader):又稱爲引導類加載器,由C++編寫,無法通過程序得到。主要負責加載JAVA中的一些核心類庫,主要是位於<JAVA_HOME>/lib/rt.jar中。
  • 拓展類加載器(Extension classLoader):主要加載JAVA中的一些拓展類,位於<JAVA_HOME>/lib/ext中,是啓動類加載器的子類。
  • 應用類加載器(System classLoader): 又稱爲系統類加載器,主要用於加載CLASSPATH路徑下我們自己寫的類,是拓展類加載器的子類。

類加載器的三大特性:委託性、可見性、單一性

委託性: 每個類中都有一個自己的類加載器的屬性,這也就是爲什麼可以通過Student.class.getClassLoader()來    獲取自己的類加載器。當一個類加載器要加載一個類時,它會先委託自己的父類加載器來加載,只有當父加載器無法加載類時,纔會自己去加載。例如我們寫了一個類Student,它的類加載器是System ClassLoader,它首先會委託給它的父加載器即Extension ClassLoader,然後Extension ClassLoader又會委託給它的父加載器BootStrap ClassLoader,啓動類加載器無法加載這個類,交給拓展類加載器,拓展類加載器也無法加載,然後才輪到系統類加載器進行加載。

可見性:可見性指的是父加載器無法利用子加載器加載的類,而子加載器可以利用父加載器加載的類。

單一性:一個類只會被一個類加載器加載一次,不會被重複加載。
 

注意:拓展類加載器和應用類加載器是Java編寫的,當JVM啓動時,它們會由啓動類加載器加載,啓動類加載器是由C++編寫的,內嵌於JVM之中,是JVM的一部分機器碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章