java對象在內存中的分配數據結構
編譯過程:jvm
編譯器把一種語言規範轉化爲另外一種語言規範的這個過程須要哪些步驟?回答這個問題須要參照《編譯原理》,總結過程以下:源碼分析
1)詞法分析:讀取源代碼,一個字節一個字節的讀進來,找出這些詞法中咱們定義的語言關鍵詞如:if、else、while等,識別哪些if是合法的哪些是不合法的。這個步驟就是詞法分析過程。 詞法分析的結果:就是從源代碼中找出了一些規範化的token流,就像人類語言中,給你一句話你要分辨出哪些是一個詞語,哪些是標點符號,哪些是動詞,哪些是名詞。 2)語法分析:就是對詞法分析中獲得的token流進行語法分析,這一步就是檢查這些關鍵詞組合在一塊兒是否是符合Java語言規範。如if的後面是否是緊跟着一個布爾型判斷表達式。 語法分析的結果:就是造成一個符合Java語言規定的抽象語法樹,抽象語法樹是一個結構化的語法表達形式,它的做用是把語言的主要詞法用一個結構化的形式組織在一塊兒。
這棵語法樹能夠被後面按照新的規則再從新組織。 3)語義分析:語法分析完成以後也就不存在語法問題了,語義分析的主要工做就是把一些難懂的,複雜的語法轉化成更簡單的語法。
就如難懂的文言文轉化爲你們都懂的百話文,或者是註釋一下一些不懂的成語。 語義分析結果:就是將複雜的語法轉化爲簡單的語法,對應到Java就是將foreach轉化爲for循環,還有一些註釋等。
最後生成一棵抽象的語法樹,這棵語法樹也就更接近目標語言的語法規則。 4)字節碼生成:將會根據通過註釋的抽象語法樹生成字節碼,也就是將一個數據結構轉化爲另一個數據結構。
就像將全部的中文詞語翻譯成英文單詞後按照英文語法組裝文英文語句。代碼生成器的結果就是生成符合java虛擬機規範的字節碼。
總結就是:學習
詞法分析就是將關鍵詞組織成token流即檢查源碼中的的關鍵詞是否真確並組織成token流(標記流), 而語法分析就是檢查源碼是否符合java語法規範並將詞組成語句。 語義分析就是簡化複雜的添加缺乏的,檢查變量類型是否合法。 代碼生成器就是遍歷這棵樹生成符合JVM規範的代碼。
Java 代碼 編譯和執行過程.net