Java源代碼編譯過程


 

  編譯其本質是將一種語言規范轉換成另一種語言規范,即將Java語言規范轉換為JVM虛擬機語言規范。結果就是.java文件到.class文件。

對於C/C++編譯直接將高級語言轉換為機器語言,Java語言不是采用這種策略,而是將高級語言編譯成一種中間態的語言--與平台無關,其執行

過程是依靠對應平台的JVM在執行時刻逐條的將字節碼指令轉換為對應的機器語言,為了提高轉換速度存在JIT技術。

二、javac編譯的具體過程

  源碼-->Token流-->語法樹-->注釋語法樹-->字節碼文件

  詞法分析:掃描源程序的字符流,按照源程序語言的的詞法規則選取各類單詞符號,產生用於語法分析的記號序列。同時創建符號表,將

所有的標識符記錄在符號表中。

  語法分析:是編譯過程的核心,依據源程序的語法規則,組織上一步產生的記號序列。形成一個按照特定語法規則組織的結構---通常是語法

樹的形式體現。

  語義分析:主要包括兩部分的內容,語義檢查,其就是對上步產生的語法樹進行檢查,包含類型檢查、控制流檢查、唯一性檢查等。另一個

任務就是對符號表的管理。

  代碼生成器:將處理過的語法樹組織成Class文件的格式。

  符號表的作用:記錄源代碼中使用的標識符,收集每個表示符的各種屬性信息。符號表的維護是貫穿整個編譯過程的。

  錯誤處理:編譯過程中的每一步都可能產生錯誤,編譯器要能對這些錯誤給予處理。

三、不同種類Java語言編譯器

根據編譯器的種類不同,編譯器編譯的過程可能存在很大的不同,商用的JVM一般具有前端編譯器和解釋器。

  前端編譯器:直接將源文件轉化為字節碼文件

  即時編譯器:將源碼轉換為字節碼,在將字節碼轉換為機器碼。

  運行前編譯:直接將源碼轉換為指定平台的機器碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM