【筆記】深入---程序編譯期編譯與優(yōu)化

java 語言的編譯期有3 種

【1】 將.java 編譯成 .class 也成為? 編譯器的前端 ,比如就javac?

【2】 將 字節(jié)碼轉(zhuǎn)換成 機(jī)器碼。 編譯器的后端。比如jit。 (just in? time compiler)

【3】靜態(tài)提前編譯器。 直接把.java 轉(zhuǎn)化為 機(jī)器碼。aot(ahead? of? time compiler)

javac 編譯器

3 個(gè)過程。


【1】 解析與填充符號(hào)表。包含 a 詞法、語法分析? b 填充符號(hào)表?

a? ?將 源碼的字符流裝變?yōu)?token(標(biāo)記) 集合,單個(gè)字符是編寫的最小元素,而標(biāo)記則是編譯過程的最小元素,比如 關(guān)鍵字、變量名、字面量、運(yùn)算符都是標(biāo)記,比如 int a= b+c 有 6個(gè)標(biāo)記? 分別是? int 、 a、 = 、b、 + 、c。從而生成了 語法樹。


b 由一組符號(hào)地址和符號(hào)信息構(gòu)成的hash結(jié)構(gòu)。用于 語義檢查和產(chǎn)生中間代碼。

【2】 注解處理器。

一個(gè)插件,可以修改、讀取、添加抽象數(shù)的任意結(jié)構(gòu)。

【3】語義分析和 字節(jié)碼生成。

以上之后生成的抽象語法數(shù),可以保證是源程序的抽象,但是無法保證是否符合邏輯。語義分析來保證其符合邏輯。

【標(biāo)注檢查】:檢查包括,變量是否被聲明,變量的類型是否滿足賦值運(yùn)算。

【數(shù)據(jù)及控制流分析】對(duì)邏輯下文進(jìn)一步驗(yàn)證。檢查包括:方法是否有返回值,所有異常是否都被處理。

生成 字節(jié)碼。

java? 語法糖

泛型

java 里的泛型 是一個(gè)偽泛型,它不像c#的泛型一樣,在編譯的時(shí)候生成不同的編碼。比如,List<String> 和 List<Integer>,在 c# 里 編譯后生成的是兩個(gè)對(duì)象,而在java 里生成的都是 List。用了 擦除法,將參數(shù)列表省去了。

自動(dòng)裝箱 和 拆箱 遍歷循環(huán)

條件編譯

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

相關(guān)閱讀更多精彩內(nèi)容

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