成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java編譯期優(yōu)化思維導(dǎo)圖

sorra / 2834人閱讀

摘要:本文參考自來自周志明深入理解虛擬機第版,拓展內(nèi)容建議讀者可以閱讀下這本書。和構(gòu)造方法一一對應(yīng),是同一概念在兩個級別的含義收斂的操作自動保證執(zhí)行父類的執(zhí)行語句塊初始化類變量字符串加操作替換為或的操作

本文參考自來自周志明《深入理解Java虛擬機(第2版)》,拓展內(nèi)容建議讀者可以閱讀下這本書。

文字版如下:

編譯期優(yōu)化 javac的編譯過程 解析和填充符號表

解析 Parse

詞法分析

源代碼字符流 -> 標記Token

源代碼字符是程序編寫的最小單位,Token是編譯過程的最小元素不可再分

語法分析

Token序列 -> 抽象語法樹AST

AST描述代碼語法結(jié)構(gòu)的樹狀結(jié)構(gòu),每個節(jié)點表示一個語法結(jié)構(gòu)(包、類型、修飾符、運算符、接口、返回值、注釋等)

填充符號表 Enter

符號表 -> 待處理列表To Do list

符號表symbol table是由一組符號地址和符號信息構(gòu)成的表

包、類、方法、字段都可以抽象成一個符號(symbol),不同種類的符號之間可以有包含嵌套關(guān)系,這一階段的任務(wù)就是識別出各類符號,并對不同種類的符號按照包含嵌套關(guān)系進行歸類,并掛接到AST對應(yīng)的結(jié)點上。

插入式注解處理器的注解處理

使用JDK1.6后提供的插入式注解標準API來開發(fā),這些API用于讀取、修改、添加語法樹的元素,運行時使用-processor參數(shù)來參與javac的編譯

插入式注解處理器起編譯期插件作用

在編譯期間插入式注解處理器對注解進行處理,可以讀取、修改、添加語法樹的元素

如果處理過程中修改了語法樹將會觸發(fā)編譯期回到填充符號表階段重新處理一輪(Round),直到語法樹不再變化

實例:lombok,在設(shè)置了相關(guān)注解后lombok會在編譯期生成源代碼中沒有的方法等

分析與字節(jié)碼生成

語義分析

標注檢查

變量使用前是否已經(jīng)被聲明

變量與賦值之間的數(shù)據(jù)類型是否能夠匹配

常量折疊

數(shù)據(jù)及控制流檢查

程序局部變量在使用前是否有賦值

方法的每條路徑是否都有返回值

是否所有的受檢異常都被正確處理

final參數(shù)、final局部變量是否被修改

局部變量是否用final修飾最終在class文件中是無差別的,因為局部變量在class中是沒有訪問標志的,這個final不變性只在編譯期檢查時保證

解語法糖

泛型:編譯后發(fā)生類型擦除,但是編譯信息會保留Signature

變長參數(shù):編譯后變成數(shù)組類型的參數(shù)

自動裝箱拆箱:編譯后裝箱通過valueOf()變成了對象,拆箱通過xxxValue()變成了原始類型值

遍歷循環(huán):編譯后變成了迭代器遍歷

條件編譯:編譯后將常量不可達條件分支直接消除掉

內(nèi)部類

枚舉類

斷言

switch處理枚舉和字符串

try定義和關(guān)閉資源

字節(jié)碼生成

處理完的語法樹和符號表 -> 字節(jié)碼

少量的代碼添加和轉(zhuǎn)換工作

添加()和()方法

()收斂的操作

調(diào)用父類的()

執(zhí)行{}語句塊

初始化實例變量

()是字節(jié)碼級別的方法,對使用者是透明的,與每個()對應(yīng)的構(gòu)造方法是源碼級別的方法,是真正被使用者開放的。()和構(gòu)造方法一一對應(yīng),是同一概念在兩個級別的含義

()收斂的操作

(JVM自動保證執(zhí)行父類的())

執(zhí)行static{}語句塊

初始化類變量

字符串加操作替換為StringBuffer或StringBuilder的append()操作

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76943.html

相關(guān)文章

  • ??導(dǎo)圖整理大廠面試高頻數(shù)組8: 移除元素的雙指針優(yōu)化, 力扣27??

    此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn), 當然也會加上我對導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...

    zhangyucha0 評論0 收藏0
  • Java多線程學(xué)習(xí)(三)volatile關(guān)鍵字

    摘要:三關(guān)鍵字能保證原子性嗎并發(fā)編程藝術(shù)這本書上說保證但是在自增操作非原子操作上不保證,多線程編程核心藝術(shù)這本書說不保證。多線程訪問關(guān)鍵字不會發(fā)生阻塞,而關(guān)鍵字可能會發(fā)生阻塞關(guān)鍵字能保證數(shù)據(jù)的可見性,但不能保證數(shù)據(jù)的原子性。 系列文章傳送門: Java多線程學(xué)習(xí)(一)Java多線程入門 Java多線程學(xué)習(xí)(二)synchronized關(guān)鍵字(1) java多線程學(xué)習(xí)(二)synchroniz...

    tain335 評論0 收藏0
  • ??思維導(dǎo)圖整理大廠面試高頻數(shù)組10: 3種方法徹底解決中位數(shù)問題, 力扣4??

    此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn), 當然也會加上我對導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...

    XanaHopper 評論0 收藏0
  • ??思維導(dǎo)圖整理大廠面試高頻數(shù)組19: 股票問題III的dp數(shù)組構(gòu)建/初始化和空間優(yōu)化難點, 力扣1

    此專欄文章是對力扣上算法題目各種方法的總結(jié)和歸納, 整理出最重要的思路和知識重點并以思維導(dǎo)圖形式呈現(xiàn), 當然也會加上我對導(dǎo)圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復(fù)看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經(jīng)知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據(jù)題號先去力扣看看官方題解, 然后再看本文內(nèi)容). 關(guān)...

    劉福 評論0 收藏0
  • 一張思維導(dǎo)圖輔助你深入了解 Vue | Vue-Router | Vuex 源碼架構(gòu)

    摘要:前言本文內(nèi)容講解的內(nèi)容一張思維導(dǎo)圖輔助你深入了解源碼架構(gòu)??偨Y(jié)以上內(nèi)容是筆者最近學(xué)習(xí)源碼時的收獲與所做的筆記,本文內(nèi)容大多是開源項目技術(shù)揭秘的內(nèi)容,只不過是以思維導(dǎo)圖的形式來展現(xiàn),內(nèi)容有省略,還加入了筆者的一點理解。1.前言 本文內(nèi)容講解的內(nèi)容:一張思維導(dǎo)圖輔助你深入了解 Vue | Vue-Router | Vuex 源碼架構(gòu)。 項目地址:github.com/biaochenxuy… 文...

    weij 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<