jvm類加載機制

一、類型的加載、連接和初始化過程都是在程序運行期間完成。生命週期如下:
類生命週期
加載、驗證、準備、初始化和卸載順序是確定的,解析階段不確定
二、類加載過程
1、加載:虛擬機完成以下三件事情
a、通過一個類的全限定名來獲取定義類的二進制字節流
b、將這個字節流所代表的靜態存儲結構轉化爲方法區的運行時數據結構
c、在內存中生成一個代表這個類的java.lang.Class對象,作爲方法區這個類的各種數據的訪問入口
2、驗證
驗證階段
3、準備
a、爲一般類變量(被static修飾的變量)分配內存並設置初始值(如int 變量賦0,boolean賦false)
b、final修飾的變量賦真實值
4、解析
虛擬機將常量池內的符號引用替換爲直接引用
5、初始化:
以下5種情況必須立即對類初始化
a、new、getstatic、putstatic或invokestatic 4條字節碼指令,若類未進行初始化,先觸發初始化
b、使用java.lang.reflect包的方法對類進行反射調用時,未初始化則觸發
c、初始化一個類時,若發現父類未初始化,觸發父類初始化
d、虛擬機啓動時,用戶需要指定一個要執行的主類(包含main()方法),虛擬機會先初始化這個主類
f、當使用jdk 1.7的動態語言支持時,如果一個java.lang.invoke.MethodHandle實例最後的解析結果REF_getstatic、REF_putstatic、REF_invokestatic 的方法句柄,且這個句柄所對應的類未初始化,觸發其初始化

發佈了49 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章