java在編譯期和運行期都做了什么


Java對象內存存儲,引用傳遞,值傳遞詳細圖解

java對象在內存中的分配

編譯過程:

編譯器把一種語言規范轉化為另一種語言規范的這個過程需要哪些步驟?回答這個問題需要參照《編譯原理》,總結過程如下:

  1)詞法分析:讀取源代碼,一個字節一個字節的讀進來,找出這些詞法中我們定義的語言關鍵詞如:ifelse、while等,識別哪些if是合法的哪些是不合法的。這個步驟就是詞法分析過程。
    詞法分析的結果:就是從源代碼中找出了一些規范化的token流,就像人類語言中,給你一句話你要分辨出哪些是一個詞語,哪些是標點符號,哪些是動詞,哪些是名詞。

  2)語法分析:就是對詞法分析中得到的token流進行語法分析,這一步就是檢查這些關鍵詞組合在一起是不是符合Java語言規范。如if的后面是不是緊跟着一個布爾型判斷表達式。
    語法分析的結果:就是形成一個符合Java語言規定的抽象語法樹,抽象語法樹是一個結構化的語法表達形式,它的作用是把語言的主要詞法用一個結構化的形式組織在一起。
這棵語法樹可以被后面按照新的規則再重新組織。
3)語義分析:語法分析完成之后也就不存在語法問題了,語義分析的主要工作就是把一些難懂的,復雜的語法轉化成更簡單的語法。
就如難懂的文言文轉化為大家都懂的百話文,或者是注釋一下一些不懂的成語。 語義分析結果:就是將復雜的語法轉化為簡單的語法,對應到Java就是將foreach轉化為for循環,還有一些注釋等。
最后生成一棵抽象的語法樹,這棵語法樹也就更接近目標語言的語法規則。
4)字節碼生成:將會根據經過注釋的抽象語法樹生成字節碼,也就是將一個數據結構轉化為另外一個數據結構。
就像將所有的中文詞語翻譯成英文單詞后按照英文語法組裝文英文語句。代碼生成器的結果就是生成符合java虛擬機規范的字節碼。

總結就是:

詞法分析就是將關鍵詞組織成token流即檢查源碼中的的關鍵詞是否真確並組織成token流(標記流),
而語法分析就是檢查源碼是否符合java語法規范並將詞組成語句。
語義分析就是簡化復雜的添加缺少的,檢查變量類型是否合法。
代碼生成器就是遍歷這棵樹生成符合JVM規范的代碼。

 

java之jvm學習筆記十三(jvm基本結構)系列

JVM的相關知識整理和學習

 

深入理解Java類加載器(1):Java類加載原理解析

深入理解Java類加載器(2):線程上下文類加載器

Java 代碼 編譯和執行過程

Jvm(jdk8)源碼分析1-java命令啟動流程詳解

Java中堆內存和棧內存詳解

Java中編譯期、運行期、堆內存和棧內存詳解

Java Jvm運行機制原理

 


免責聲明!

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



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