ClassLoader

類加載器就是用來加載類的對象,而ClassLoader是一個抽象類,只要給出類的二進制名稱,類加載器就能肯定或生成構建這個類的定義;一般是把二進制名稱轉成文件系統的文件名,再讀入這個類文件。bootstrap

每一個類對象都擁有getClassLoader 這個方法;數組

數組建立的類對象不是由類加載器加載的,而是運行時按需加載,對每個數組元素調用類加載器,而元素類型爲原始類型時就沒有類加載器;安全

能夠經過繼承ClassLoader來擴展一些在JVM動態加載過程當中的處理方式網絡

類加載器經常使用於安全管理,指明哪些是安全域併發

ClassLoader使用一種委託模式來查找類和資源,每一個ClassLoader的實例都有本身的父類加載器,當本身要查找類或資源前,ClassLoader先委託父類進行查找 。代理

虛擬機有一個內置的類加載器,bootstrap class loader,它沒有父類加載器,卻能夠當其它類加載器的父類加載器。對象

 

 

類加載器支持並行加載,即所謂的併發模式,這個須要類加載在初始化階段調用registerAsParallelCapable 本身註冊;ClassLoader是默認並行的,而它的子類須要主動註冊。繼承

當執行環境中的代理模式層次不清時,類加載須要並行加載,由於類加載進程方法會持有加載鎖,這可能致使死鎖。進程

 

一般JVM加載都使用平臺依賴的方式從本地加載類,例如UNIX系統,虛擬機是從CLASSPATH環境變量定義的路徑開始加載類;資源

而後還有些類是從網絡生成的,

 

網絡類加載器的子類必須有如下2個方法,

class NetworkClassLoader extends ClassLoader {

  String host;

  int port;

  public Class findClass(String name) {

    byte[] b = loadClassData(name);

    return defineClass(name, b, 0, b.length);

  }

  private byte[] loadClassData(String name) {

    // load the class data from the connection

  }

相關文章
相關標籤/搜索