摘要:本文參考自來自周志明深入理解虛擬機第版,拓展內容建議讀者可以閱讀下這本書。和構造方法一一對應,是同一概念在兩個級別的含義收斂的操作自動保證執行父類的執行語句塊初始化類變量字符串加操作替換為或的操作
本文參考自來自周志明《深入理解Java虛擬機(第2版)》,拓展內容建議讀者可以閱讀下這本書。
文字版如下:
編譯期優化 javac的編譯過程 解析和填充符號表
解析 Parse
詞法分析
源代碼字符流 -> 標記Token
源代碼字符是程序編寫的最小單位,Token是編譯過程的最小元素不可再分
語法分析
Token序列 -> 抽象語法樹AST
AST描述代碼語法結構的樹狀結構,每個節點表示一個語法結構(包、類型、修飾符、運算符、接口、返回值、注釋等)
填充符號表 Enter
符號表 -> 待處理列表To Do list
符號表symbol table是由一組符號地址和符號信息構成的表
包、類、方法、字段都可以抽象成一個符號(symbol),不同種類的符號之間可以有包含嵌套關系,這一階段的任務就是識別出各類符號,并對不同種類的符號按照包含嵌套關系進行歸類,并掛接到AST對應的結點上。
插入式注解處理器的注解處理使用JDK1.6后提供的插入式注解標準API來開發,這些API用于讀取、修改、添加語法樹的元素,運行時使用-processor參數來參與javac的編譯
插入式注解處理器起編譯期插件作用
在編譯期間插入式注解處理器對注解進行處理,可以讀取、修改、添加語法樹的元素
如果處理過程中修改了語法樹將會觸發編譯期回到填充符號表階段重新處理一輪(Round),直到語法樹不再變化
實例:lombok,在設置了相關注解后lombok會在編譯期生成源代碼中沒有的方法等
分析與字節碼生成
語義分析
標注檢查
變量使用前是否已經被聲明
變量與賦值之間的數據類型是否能夠匹配
常量折疊
…
數據及控制流檢查
程序局部變量在使用前是否有賦值
方法的每條路徑是否都有返回值
是否所有的受檢異常都被正確處理
final參數、final局部變量是否被修改
局部變量是否用final修飾最終在class文件中是無差別的,因為局部變量在class中是沒有訪問標志的,這個final不變性只在編譯期檢查時保證
…
解語法糖
泛型:編譯后發生類型擦除,但是編譯信息會保留Signature
變長參數:編譯后變成數組類型的參數
自動裝箱拆箱:編譯后裝箱通過valueOf()變成了對象,拆箱通過xxxValue()變成了原始類型值
遍歷循環:編譯后變成了迭代器遍歷
條件編譯:編譯后將常量不可達條件分支直接消除掉
內部類
枚舉類
斷言
switch處理枚舉和字符串
try定義和關閉資源
字節碼生成
處理完的語法樹和符號表 -> 字節碼
少量的代碼添加和轉換工作
添加
調用父類的
執行{}語句塊
初始化實例變量
(JVM自動保證執行父類的
執行static{}語句塊
初始化類變量
字符串加操作替換為StringBuffer或StringBuilder的append()操作
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76943.html
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
摘要:三關鍵字能保證原子性嗎并發編程藝術這本書上說保證但是在自增操作非原子操作上不保證,多線程編程核心藝術這本書說不保證。多線程訪問關鍵字不會發生阻塞,而關鍵字可能會發生阻塞關鍵字能保證數據的可見性,但不能保證數據的原子性。 系列文章傳送門: Java多線程學習(一)Java多線程入門 Java多線程學習(二)synchronized關鍵字(1) java多線程學習(二)synchroniz...
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
此專欄文章是對力扣上算法題目各種方法的總結和歸納, 整理出最重要的思路和知識重點并以思維導圖形式呈現, 當然也會加上我對導圖的詳解. 目的是為了更方便快捷的記憶和回憶算法重點(不用每次都重復看題解), 畢竟算法不是做了一遍就能完全記住的. 所以本文適合已經知道解題思路和方法, 想進一步加強理解和記憶的朋友, 并不適合第一次接觸此題的朋友(可以根據題號先去力扣看看官方題解, 然后再看本文內容). 關...
摘要:前言本文內容講解的內容一張思維導圖輔助你深入了解源碼架構。總結以上內容是筆者最近學習源碼時的收獲與所做的筆記,本文內容大多是開源項目技術揭秘的內容,只不過是以思維導圖的形式來展現,內容有省略,還加入了筆者的一點理解。1.前言 本文內容講解的內容:一張思維導圖輔助你深入了解 Vue | Vue-Router | Vuex 源碼架構。 項目地址:github.com/biaochenxuy… 文...
閱讀 2147·2021-11-22 15:22
閱讀 1295·2021-11-11 16:54
閱讀 1822·2021-09-23 11:32
閱讀 3011·2021-09-22 10:02
閱讀 1778·2019-08-30 12:59
閱讀 1090·2019-08-29 16:27
閱讀 627·2019-08-29 13:21
閱讀 2465·2019-08-28 17:57