1. 程式人生 > >深入理解Java虛擬機器(二)——類載入器深入解析

深入理解Java虛擬機器(二)——類載入器深入解析

類載入過程

類載入:類載入器將class檔案載入到虛擬機器的記憶體 

載入:在硬碟上查詢並通過IO讀入位元組碼檔案

連線:執行校驗、準備、解析(可選)步驟

校驗:校驗位元組碼檔案的正確性

準備:給類的靜態變數分配記憶體,並賦予預設值

解析:類裝器裝入類所引用的其他所有類

初始化:對類的靜態變數初始化為指定的值,執行靜態程式碼塊

類載入器種類

啟動類載入器:負責載入JRE的核心類庫,如jre目標下的rt.jar,charsets.jar等

擴充套件類載入器:負責載入JRE擴充套件目錄ext中JAR類包

系統類載入器:負責載入ClassPath路徑下的類包

使用者自定義載入器:負責載入使用者自定義路徑下的類包

類載入機制

全盤負責委託機制當一個ClassLoader載入一個類時,除非顯示的使用另一個ClassLoader,該類所依賴和引用的類也由這個ClassLoader載入

雙親機制:指先委託父類載入器尋找目標類,在找不到的情況下自己的路徑中查詢並載入目標類

雙親委派模式優勢

沙箱安全機制:自己寫的String.class類不會被載入,這樣便可以防止核心API庫被隨意篡改

避免類的重複載入:當父親已經載入了該類時,就沒有必要子ClassLoader再   載入一次

類載入過程

JVM載入jar包是否會將包裡的所有類全部載入進記憶體?

JVM對class檔案是按需載入(執行期間動態載入),非一次性載入,見示例(啟動需要加上引數:-verbose:class)