歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java ClassLoader 基礎

基本概念:

Java Classloader(類裝載器):JRE的一個模塊,用於裝載Java類到JVM。 

JRE加載一個類到JVM需要以下基本步驟:

  1. 裝載:查找並導入class文件,如String.class; 

  2. 鏈接:校驗、准備、解析,其中解析步驟是可以選擇的,由使用目的決定; 

  3. 校驗:檢查載入class文件數據的正確性,因為某些class文件可能是利用工具生成,而非使用Java編譯器編譯生成; 

  4. 准備:給類的靜態成員分配存儲空間; 

  5. 解析:將符號引用轉成直接引用; 

  6. 初始化:對類的靜態成員、靜態代碼塊執行初始化工作。 

JRE自帶的的三個ClassLoader:

  1. Bootstrap class loader:用於裝載<JAVA_HOME>/jre/lib目錄下的Java核心類庫,該裝載器使用本地代碼實現,本身不是Java類。

  2. Extensions class loader:用於裝載<JAVA_HOME>/jre/lib/ext目錄下的類庫,或者java.ext.dirs系統屬性指定的目錄,具體實現類是sun.misc.Launcher$ExtClassLoader。

  3. System class loader:用於裝載應用CLASSPATH路徑指定的類與資源(如配置文件等),具體實現類是sun.misc.Launcher$AppClassLoader,所以也常稱為App class loader。 

為什麼需要三個class loader?這三個class loader又是如何分工了?這年代靠拼爹,需要任何東西盡管先向爹要,爹沒有再自己拼,下圖中100萬比喻為請求的類,天一為System class loader,天一爸爸為Extensions class loader,天一爺爺為BootStrap class loader,查看保險箱相當於load class,通過這個形象的比喻可以簡單的理解class loader代理關系,以及單一職責鏈模式。JRE提供三個class loader主要是為了分工以及JVM實現的需要。

Copyright © Linux教程網 All Rights Reserved