java 類的加載器含義及分類

類的加載器是將.class文件,加載到內存(JVM)中,並生成java.lang.class對象。

加載到JVM中的類都有一個唯一的標識,用其包名和類名作爲其標識(java.lang.String就相當於一個標識)。

JVM在運行時會產生3個類加載器組成的初始化加載器層次結構

App/System ClassLoader
系統(應用)類加載器:負責java –classpath 或 –D java.class.path所指的目錄下的類與jar包裝入工作 ,是最常用的加載器
可以通過ClassLoader的靜態方法getSystemLoader()來獲取系統類的加載器。如果沒有特別指定,則用戶自定義的類的加載器都以此類加載器作爲父類。

Extension ClassLoader
擴展類加載器:負責jre/lib/ext目錄下的jar包或 –D java.ext.dirs 指定目錄下的jar包裝入工作庫

Bootstrap ClassLoader
引導類加載器:用C++編寫的,是JVM自帶的類加載器,負責Java平臺核心庫,用來加載核心類庫。該加載器無法直接獲取

從 系統類加載器 到 擴展類加載器 到 引導類加載器,檢查是否已加載,反之嘗試加載類。

JVM的根加載器並不是由java實現的,所以無法通過程序獲取跟加載器Bootstrap ClassLoader

類加載器加載Class大致要經過幾個步驟

  1. 檢測此Class是否載入過(及在緩存區中知否由此Class),如果有則直接最後一步。
  2. 如果父類加載器存在,則是直接使用父類在加載器去加載目標類,否則直接使用根加載器去加載載入目標類。如果能找到目標類的文件則直接加載成功,否則拋出ClassNotFoundException異常。
  3. 返回對應的java.lang.Class類對象。
發佈了53 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章