《深入理解Java虛擬機》學習筆記(七)(早期(編譯期)優(yōu)化(Javac編譯器))

早期(編譯期)優(yōu)化

前端編譯器(把*.java文件轉(zhuǎn)變成*.class文件):Sun的Javac掌眠、 Eclipse JDT中的增量式編譯器(ECJ)蕾盯。
JIT編譯器(把字節(jié)碼轉(zhuǎn)變成機器碼):HotSpot VM的C1、 C2編譯器蓝丙。
AOT編譯器(把*.java文件編譯成本地機器代碼):GNU Compiler for the Java(GCJ)级遭、 Excelsior JET望拖。

Javac編譯器

編譯過程大致分為三個:解析與填充符號表過程、插入式注解處理器的注解處理過程挫鸽、分析與字節(jié)碼生成過程说敏。

  • 解析與填充符號表過程
    • 1.詞法、 語法分析
      • 詞法分析是將源代碼的字符流轉(zhuǎn)變?yōu)闃擞洠═oken)集合
      • 語法分析是根據(jù)Token序列構(gòu)造抽象語法樹的過程丢郊,抽象語法樹(Abstract Syntax Tree,AST)是一種用來描述程序代碼語法結(jié)構(gòu)的樹形表示方式盔沫,語法樹的每一個節(jié)點都代表著程序代碼中的一個語法結(jié)構(gòu)(Construct)


        圖1 Javac編譯過程
    • 2.填充符號表
      • 符號表(Symbol Table)是由一組符號地址和符號信息構(gòu)成的表格
  • 注解處理器
    • 如果插入式注解處理器在處理注解期間對語法樹進行了修改,編譯器將回到解析及填充符號表的過程重新處理枫匾,直到所有插入式注解處理器都沒有再對語法樹進行修改為止架诞,如圖1的回環(huán)過程(Round)。
  • 語義分析與字節(jié)碼生成
    • 語義分析的主要任務(wù)是對結(jié)構(gòu)上正確的源程序進行上下文有關(guān)性質(zhì)的審查婿牍,如進行類型檢查侈贷。
    • 語義分析過程分為標注檢查以及數(shù)據(jù)及控制流分析
      • 1.標注檢查
        • 檢查的內(nèi)容包括諸如變量使用前是否已被聲明、 變量與賦值之間的數(shù)據(jù)類型是否能夠匹配等
      • 2.數(shù)據(jù)及控制流分析
        • 對程序上下文邏輯更進一步的驗證等脂,它可以檢查出諸如程序局部變量在使用前是否有賦值俏蛮、 方法的每條路徑是否都有返回值、 是否所有的受查異常都被正確處理了等問題上遥。
  • 局部變量與字段(實例變量搏屑、 類變量)是有區(qū)別的,它在常量池中沒有
    CONSTANT_Fieldref_info的符號引用粉楚,自然就沒有訪問標志(Access_Flags)的信息辣恋,甚至可能連名稱都不會保留下來(取決于編譯時的選項),自然在Class文件中不可能知道一個局部變量是不是聲明為final
    • 3.解語法糖
      • 語法糖指指在計算機語言中添加的某種語法模软,這種語法對語言的功能并沒有影響伟骨,但是更方便程序員使用。
      • 虛擬機運行時不支持泛型燃异、變長參數(shù)等語法携狭,它們在編譯階段還原回簡單的基礎(chǔ)語法結(jié)構(gòu),這個過程稱為解語法糖回俐。
    • 4.字節(jié)碼生成
      • 字節(jié)碼生成階段不僅僅是把前面各個步驟所生成的信息(語法樹逛腿、 符號表)轉(zhuǎn)化成字節(jié)碼寫到磁盤中,編譯器還進行了少量的代碼添加和轉(zhuǎn)換工作仅颇。
    • 實例構(gòu)造器<init>()方法和類構(gòu)造器<clinit>()方法就是在這個階段添加到語法樹之中的

Java語法糖

泛型與類型擦除

泛型技術(shù)實際上是Java語言的一顆語法糖单默,Java語言中的泛型實現(xiàn)方法稱為類型擦除,基于這種方法實現(xiàn)的泛型稱為偽泛型忘瓦。

自動裝箱搁廓、 拆箱與遍歷循環(huán)

條件編譯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子枚抵,更是在濱河造成了極大的恐慌线欲,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異成榜,居然都是意外死亡贺氓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門如筛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事拉庶。” “怎么了秃励?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵氏仗,是天一觀的道長。 經(jīng)常有香客問我夺鲜,道長皆尔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任币励,我火速辦了婚禮慷蠕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘食呻。我一直安慰自己流炕,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布仅胞。 她就那樣靜靜地躺著每辟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪干旧。 梳的紋絲不亂的頭發(fā)上渠欺,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音莱革,去河邊找鬼峻堰。 笑死,一個胖子當著我的面吹牛盅视,可吹牛的內(nèi)容都是我干的捐名。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼闹击,長吁一口氣:“原來是場噩夢啊……” “哼镶蹋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤贺归,失蹤者是張志新(化名)和其女友劉穎淆两,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拂酣,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秋冰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婶熬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剑勾。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赵颅,靈堂內(nèi)的尸體忽然破棺而出虽另,到底是詐尸還是另有隱情,我是刑警寧澤饺谬,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布捂刺,位于F島的核電站,受9級特大地震影響募寨,放射性物質(zhì)發(fā)生泄漏族展。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一绪商、第九天 我趴在偏房一處隱蔽的房頂上張望苛谷。 院中可真熱鬧,春花似錦格郁、人聲如沸腹殿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锣尉。三九已至,卻和暖如春决采,著一層夾襖步出監(jiān)牢的瞬間自沧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工树瞭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拇厢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓晒喷,卻偏偏與公主長得像孝偎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凉敲,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容