java編譯期、運行期和字節碼自整理(未完成)

1.編譯期:

詞法分析→語法分析→語義分析→代碼生成。

詞法分析:

       讀入字符→組成詞素→生成詞法單元序列→分析序列。

詞法分析:

       掃描程序→獲取源代碼(幾號形式)→語法分析(定義程序結構元素及其關係)→繪製語法樹。

語義分析:

      分析靜態語義(聲明和類型檢查)→添加額外信息(“註釋”或“裝飾”到語法樹,屬性添加到符號表)。

代碼生成:

      生成中間代碼→生成目標代碼。

2.運行期:

加載→連接(驗證→準備→解析)→初始化→使用→卸載

加載:

     (獲取或動態編譯出).class文件的二進制數據→讀入內存(運行時的數據區的方法區內)→在堆區創建java.lang.Class對象(封裝類的方法區內數據結構)。

驗證:

      類文件結構檢查(固定格式)→語義檢查(語法規定)→字節碼驗證(靜態方法,實例對象)→二進制兼容性的驗證(引用類之間協調一致)。

準備:

      (jvm對類的靜態變量)分配內存→設置初始值。

解析:

       (jvm把二進制數據的)符號引用→直接引用。

        歸納:編譯時不知道實際地址,是符號引用;執行時是實際地址,是直接引用。

初始化:

        jvm執行初始化語句→爲靜態變量賦予初始值。

        位置:靜態變量聲明處;靜態代碼塊。

使用:

        程序運行過程。

卸載:

        涉及GC。無引用對象被回收。

3.字節碼:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章