jvm類別載入的過程:先執行載入;然後驗證確保Class檔案的位元組流中包含的資訊符合目前虛擬機器的要求;接著準備為類別的靜態變數分配內存,初始化為系統的初始值;最後解析,並初始化。
jvm類別載入的過程:
#1.載入
# 載入時jvm做了這三件事:
1)透過一個類別的全限定名稱來取得該類別的二進位位元組流
2)將這個位元組流的靜態儲存結構轉換為方法區執行階段資料結構
3)在記憶體堆中產生一個代表該類別的java.lang.Class對象,作為該類別資料的存取入口
#2.驗證
驗證、準備、解析這三個步驟可以看做是一個連接的過程,將類別的字節碼連接到JVM的運作狀態之中
驗證是為了確保Class檔案的位元組流中包含的資訊符合目前虛擬機器的要求,不會威脅到jvm的安全性
驗證主要包含以下幾個方面的驗證:
1)檔案格式的驗證,驗證位元組流是否符合Class檔案的規範,是否能被目前版本的虛擬機器處理
2)元資料驗證,對字節碼所描述的資訊進行語意分析,確保符合java語言規範
3)字節碼驗證通過資料流和控制流分析,確定語義是合法的,符合邏輯的
4)符號引用驗證這個校驗在解析階段發生
3.準備,為類別的靜態變數分配內存,初始化為系統的初始值。對於final static修飾的變量,
直接賦值為使用者的定義值。如下面的範例:這裡在準備階段過後的初始值為0,而不是7
public static int a=7
4.解析
## 解析是將常數池內的符號引用轉為直接引用(如實體記憶體位址指標)5.初始化
到了初始化階段,jvm才真正開始執行類別中定義的java程式碼 1)初始化階段是執行類別建構器相關學習推薦:
以上是jvm類別載入的過程是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!