1.編譯期:
詞法分析→語法分析→語義分析→代碼生成。
詞法分析:
讀入字符→組成詞素→生成詞法單元序列→分析序列。
詞法分析:
掃描程序→獲取源代碼(幾號形式)→語法分析(定義程序結構元素及其關係)→繪製語法樹。
語義分析:
分析靜態語義(聲明和類型檢查)→添加額外信息(“註釋”或“裝飾”到語法樹,屬性添加到符號表)。
代碼生成:
生成中間代碼→生成目標代碼。
2.運行期:
加載→連接(驗證→準備→解析)→初始化→使用→卸載
加載:
(獲取或動態編譯出).class文件的二進制數據→讀入內存(運行時的數據區的方法區內)→在堆區創建java.lang.Class對象(封裝類的方法區內數據結構)。
驗證:
類文件結構檢查(固定格式)→語義檢查(語法規定)→字節碼驗證(靜態方法,實例對象)→二進制兼容性的驗證(引用類之間協調一致)。
準備:
(jvm對類的靜態變量)分配內存→設置初始值。
解析:
(jvm把二進制數據的)符號引用→直接引用。
歸納:編譯時不知道實際地址,是符號引用;執行時是實際地址,是直接引用。
初始化:
jvm執行初始化語句→爲靜態變量賦予初始值。
位置:靜態變量聲明處;靜態代碼塊。
使用:
程序運行過程。
卸載:
涉及GC。無引用對象被回收。