類在虛擬機器中的載入過程
虛擬機器的類載入機制:java原始碼被編譯成class位元組碼,JVM把描述類資料的位元組碼.class檔案載入到記憶體,並對資料進行校驗、轉換解析和初始化,最終形成可以被虛擬機器直接使用的java型別。 類從被載入到虛擬機器記憶體中開始,到卸載出記憶體為止,生命週期包括:
1、載入 1)通過一個類的全限定名來獲取定義此類的二進位制位元組流 2)將這個位元組流所代表的靜態儲存結構轉化為方法區域的執行資料結構 3)在java堆中生成一個代表這個類的java.lang.Class物件,作為方法區域資料的訪問入口 2、驗證 1)檔案格式驗證:驗證位元組流檔案是否符合Class檔案格式的規範,並且能被當前虛擬機器正確的處理 2)元資料驗證:對位元組碼描述的資訊進行語義分析,以保證其描述的資訊符合java語言的規範 3)位元組碼驗證:進行資料流和控制流的分析,保證被校驗類的方法在執行時不會危害虛擬機器 4)符號引用驗證:發生在虛擬機器將符號引用轉化為直接引用的時候(解析動作在解析階段發生)
3、準備 為變數分配記憶體並設定類變數(僅為類變數(Static)不包括例項變數)的初始化。 (final修飾的類變數將會賦值成真是的值,非final的變數,JVM會將其設定成“零值”) 4、解析 是虛擬機器常量池內的符號引用替換為直接引用的過程。(類、介面;欄位;類方法;介面方法) 5、初始化 執行類構造器。 6、使用 新執行緒——程式計數器——JVM棧執行(物件引用)——堆記憶體(直接引用)——方法區
7、解除安裝 GC垃圾回收。
(載入、驗證、準備、初始化、解除安裝這五個階段固定,順序不可變。為了執行時動態繫結特性(如重寫)可將解析階段放至初始化之後)