JAVA類加載器

類加載器,說白了就是加載類的 java

  .類加載器負責將.class文件(可能在磁盤上,也可能在網絡上)加載到內存中,併爲之生成對應的java.lang.Class對象 bootstrap

  .當JVM啓動時,會造成由三個類加載器組成的初始類加載器層次結構: 網絡

                 BootStrap----------JRE/lib.jar      根節點類加載器 url

                 ExtClassLoader-----------JRE/lib/ext/*.jar       擴展類加載器 spa

                 AppClassLoader-----------CLASSPATH指定的全部jar或目錄        應用類加載器也叫系統加載器 操作系統

 

   BootStrap classloader: 引導(也稱原始)類加載器,他負責加載java的核心類(也就是JDK自帶類) orm

                                          這個加載器是很是特殊的,它實際上不是java.lang.ClassLoader的子類,而是由                                           JVM自身實 現的。能夠經過執行一下代碼來得到bootstrap classloader 加載了哪些 對象

                                           核心類庫: 內存

                                URL[] urls = sun.misc.Launcher. getBootstrapClassPath (). getURLs (); ssl

                                         for ( int i = 0; i < urls.length ; i ++) {

                                                System. out .println ( urls [ i ]. toExternalForm ());

                                          }

 

   extension classloader: 擴展類加載器,它負責加載JRE的擴展目錄中的jar包,這爲引入除java核心類之外的新功能

                                         提供了一個標準機制。由於默認的擴展目錄對全部從同一個JRE中啓動的JVM都是通用的所

                                         以,放入這個目錄的JAR類包對全部的JVM和system classloader都是可見的。。

 

  (systemm)App classloader: 系統(也稱爲應用)類加載器,它負責在JVM被啓動時,加載來自在命令java中的

                                                   classpath或者java.class.path系統屬性或者CLASSPATH操做系統屬性所指定

                                                   的JAR類包和類路徑

 

  全盤負責委託機制:

           全盤負責:當一個classloader加載一個class的時候,這個classs所依賴的和引用的其餘class一般也由這個

                          classloader負責載入。

 

           委託機制: 先讓parent(父)類加載器尋找,只有在parent找不到的時候才從本身的類路徑中尋找。

 

 類加載器還採用了cache機制:

                   若是cache中保存了這個class就直接反悔它,若是沒有才從文件中讀取和轉換成class,並存入cache,

                   這就是爲何修改class可是必須從新啓動JVM才能生效,而且類指加載一次的緣由

相關文章
相關標籤/搜索