雙親委派模型:啓動類加載器、擴展類加載器、應用程序類加載器

Java中的類和類加載器一塊兒 惟一肯定類在jvm中的一致性。java

  • BootStrapClassLoader <- ExtClassLoader <- AppClassLoader <- 自定義類加載器

  • 啓動類加載器:主要負責加載 java.home 下的 lib 目錄下的類庫或者被 -Xbootclasspath 參數指定的路徑中的類庫。應用程序不能直接使用該加載器。
  • 擴展類加載器:負責加載 java.home 下的 lib/ext 下的類或者系統變量 java.ext.dirs 指定路徑下的類庫。開發者能夠使用該加載器。
  • 引用程序類加載器:負責加載用戶指定的路徑 即 classPath 下的類庫。若是程序員沒有自定義類加載器,默認調用該加載器。

  • 雙親委派模型要求,除了頂層的啓動類加載器之外,其餘的類加載器都要有本身的父類加載器,使用組合關係複用父類加載器。
  • 過程:當用戶須要加載器時,首先不會本身去加載這個類,而是將請求委託給父類加載器,每一層都是如此,所以最終都會到達頂層的類加載器。只有當父類加載器反饋不能加載,纔會將加載的任務給子類加載器。
  • 好處:讓Java類同其類加載器一塊兒具有了一種帶優先級。好比咱們要加載java.lang.Object類,不管咱們用哪一個類加載器去加載Object類,這個加載請求最終都會委託給Bootstrap ClassLoader,這樣就保證了全部加載器加載的Object類都是同一個類。這樣保證了Java程序運行的穩定性。
相關文章
相關標籤/搜索