JVM類加載機制

java 類加載機制

1.概述

​ Class文件由類裝載器裝載後,在JVM中將形成一份描述Class結構的元信息對象,通過該元信息對象可以獲知Class的結構信息:如構造函數,屬性和方法等,Java允許用戶藉由這個Class相關的元信息對象間接調用Class對象的功能。
​ 虛擬機把描述類的數據從class文件加載到內存,並對數據進行校驗,轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這就是虛擬機的類加載機制。

2.工作機制

(1) 裝載:查找和導入Class文件;

1. 通過一個類的 全限定名 來獲取定義此類的 二進制字節流
2. 將這個字節流所代表的 靜態存儲結構 轉化爲 方法區的 運行時數據結構
3. 在 Java 堆中生成一個代表這個類的 java.lang.Class 對象,作爲方法區訪問這些數據的入口。

(2) 鏈接:把類的二進制數據合併到 JRE 中;

​ (a) 校驗:檢查載入Class文件數據的正確性;

​ (b) 準備:給類的靜態變量分配存儲空間;

​ © 解析:將符號引用轉成直接引用;

(3) 初始化:對類的靜態變量,靜態代碼塊執行初始化操作

1. 遇到 new、getstatic、putstatic 或 invokestatic 這4條字節碼指令時,如果類沒有進行過初始化,則需要先觸發其初始化。生成這4條指令的最常見的Java代碼場景是:使用new關鍵字實例化對象的時候,讀取或設置一個類的靜態字段(被final修飾、已在編譯期把結果放入常量池的靜態字段除外)的時候,以及調用一個類的靜態方法的時候。
2. 使用java.lang.reflect包的方法對類進行反射調用的時候,如果類沒有進行過初始化,則需要先觸發其初始化。
3. 當初始化一個類的時候,如果發現其父類還沒有進行過初始化,則需要先觸發其父類的初始化。
4. 當虛擬機啓動時,用戶需要指定一個要執行的主類(包含main()方法的那個類),虛擬機會先初始化這個主類。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章