javac編譯過程

java編譯過程主要分一下幾步:

  1. 詞法分析: 把源代碼中的字符(各個關鍵字、變量等)轉(zhuǎn)為標記(Token)集合,單個字符的程序編寫的最小單元,而token是編譯過程的最小單元。
  2. 語法分析: 將標記(Token)集合構造為抽象語法樹。語法樹的每一個節(jié)點都代表代碼中的一個語法結構(如包、類型、接口、修飾符等等)。
  3. 填充符號表:符號表是有一組符號地址和符號信息構成的表格。填充符號表的過程的出口是一個待處理列表,包含了每一個抽象語法樹(和package-info.java)的頂級節(jié)點。
  4. 插入式注解處理器處理注解: 注解處理器可以增刪改抽象語法樹的任意元素。因此每當注解處理器對語法樹進行修改時,都將重新執(zhí)行1,2,3步,直到注解處理器不再對語法樹進行修改為止。每一次的循環(huán)過程都稱為一次Round。
  5. 語義分析:對語法樹結構上正確的源程序進行上下文有關的審查。
    • 標注檢查:包括是否變量聲明、變量和賦值類型是否匹配等、常量折疊。
    • 數(shù)據(jù)和控制流分析:對程序上下文邏輯更進一步驗證。包括變量使用前是否賦值、方法是否有返回值、異常是否被正確處理等。
  6. 解語法糖: 把高級語法(如:泛型、可變參數(shù)、拆箱裝箱等)轉(zhuǎn)為基礎語法結構,虛擬機運行時不支持這些高級語法。
  7. 生成字節(jié)碼:把語法樹、符號表里的信息轉(zhuǎn)為字節(jié)碼寫到磁盤,同時進行少量的代碼添加和轉(zhuǎn)換工作。

以上內(nèi)容大部分摘自:《深入理解java虛擬機》 -- 周志明

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容