深入理解Java虛擬機器(二)——類載入器深入解析
阿新 • • 發佈:2018-12-18
類載入過程
•類載入:類載入器將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)