首先我們知道JVM是什麼以及類載入器的作用
不清楚的可以看看 JAVA-大白話探索JVM-類載入器(一)
現在我們來摸索下類的載入過程
首先,我們將類載入過程分為三步走- 裝載
- 連結
- 初始化
其中 連結 分為三步驟
1.裝載
- 通過一個類的全限定名獲取其定義的二進位制位元組流
- 將這個位元組流所代表的靜態儲存結構轉化為方法區的執行時資料結構
- 在堆中生成一個代表這個類的java.lang.Class物件,作為對方法區中這些資料的訪問入口
2.連結
-
驗證
-
確保Class檔案的位元組流資訊符合JVM的要求
-
4個階段校驗(檔案格式校驗、後設資料校驗、位元組碼校驗、符號引用校驗)
-
驗證階段是非常重要的,但不是必須的,它對程式執行期沒有影響,如果所引用的類經過反覆驗證,那麼可以考慮採用-Xverifynone引數來關閉大部分的類驗證措施,以縮短虛擬機器類載入的時間。
-
-
準備
- 為類的靜態變數(static)分配記憶體,並將其初始化為預設值
-
解析
-
把類中的符號引用轉換為直接引用
-
符號引用就是一組符號來描述目標,可以是任何字面量。
-
直接引用就是直接指向目標的指標、相對偏移量或一個間接定位到目標的控制程式碼。
-
3.初始化
對類的靜態變數,靜態程式碼塊執行初始化操作