首頁  >  文章  >  Java  >  jvm類別載入的過程是什麼

jvm類別載入的過程是什麼

coldplay.xixi
coldplay.xixi原創
2020-08-12 15:08:123209瀏覽

jvm類別載入的過程:先執行載入;然後驗證確保Class檔案的位元組流中包含的資訊符合目前虛擬機器的要求;接著準備為類別的靜態變數分配內存,初始化為系統的初始值;最後解析,並初始化。

jvm類別載入的過程是什麼

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)初始化階段是執行類別建構器()方法的過程。類別建構器()方法是由編譯器自動收集

           類別中的所有類別變數的賦值動作和靜態語句區塊(static區塊)中的語句合併產生的。

      2)初始化一個類別的時候,如果發現其父類別還沒有進行過初始化、則需要先觸發其父類別的初始化。

      3)虛擬機會保證一個類別的()方法在多執行緒環境中被正確加鎖和同步。

jvm類別載入的過程是什麼

相關學習推薦:

java基礎教學

以上是jvm類別載入的過程是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn