注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計GraalVM與Java靜態(tài)編譯:原理與應(yīng)用

GraalVM與Java靜態(tài)編譯:原理與應(yīng)用

GraalVM與Java靜態(tài)編譯:原理與應(yīng)用

定 價:¥89.00

作 者: 林子熠 著
出版社: 機(jī)械工業(yè)出版社
叢編項: Java核心技術(shù)系列
標(biāo) 簽: 暫缺

ISBN: 9787111696391 出版時間: 2022-01-01 包裝: 平裝
開本: 16開 頁數(shù): 212 字?jǐn)?shù):  

內(nèi)容簡介

  本書作者是阿里靜態(tài)編譯研究團(tuán)隊的核心成員,曾任華為高級工程師,一直從事靜態(tài)編譯技術(shù)的研究與落地。本書得到業(yè)界多位知名專家的鼎力推薦,是深度、系統(tǒng)研究Java靜態(tài)編譯技術(shù)的鮮見資料。閱讀本書,讀者可以了解Java靜態(tài)編譯技術(shù)的特點、實現(xiàn)機(jī)制、優(yōu)缺點等,以將其應(yīng)用到自己的業(yè)務(wù)實踐中。 【本書分為三部分】: 第1部分(第1~4章)首先概要介紹Java編譯器的演進(jìn)過程,然后介紹Java靜態(tài)編譯的基本原理、總體能力和發(fā)展前景,主要向讀者說明Java靜態(tài)編譯技術(shù)是什么、業(yè)界主流實現(xiàn)方案、GraalVM結(jié)構(gòu)及靜態(tài)編譯應(yīng)用的流程。 第2部分(第5~12章)詳細(xì)介紹GraalVM如何實現(xiàn)Java的靜態(tài)編譯,著重介紹如何支持現(xiàn)有Java特性,涵蓋靜態(tài)編譯的總體流程、重要機(jī)制(擴(kuò)展、替換、類提前初始化優(yōu)化機(jī)制)、動態(tài)特性(反射和序列化)實現(xiàn)、跨語言編程能力等。讀者可以掌握GraalVM對Java靜態(tài)編譯技術(shù)的具體實現(xiàn)原理,了解動態(tài)的Java特性是如何被靜態(tài)化支持的,洞悉靜態(tài)編譯本質(zhì)。 第3部分(第13~15章)主要關(guān)注GraalVM的實踐應(yīng)用,介紹如何將傳統(tǒng)Java應(yīng)用編譯為二進(jìn)制可執(zhí)行文件或靜態(tài)庫文件并部署上云,以及與傳統(tǒng)的Java程序完全不同的編譯調(diào)試技術(shù)。讀者可以獲悉靜態(tài)編譯實踐中常見問題的解決方案,以更快擁有靜態(tài)編譯技術(shù)的應(yīng)用實踐能力。

作者簡介

  林子熠博士,阿里巴巴集團(tuán)技術(shù)專家,曾任華為技術(shù)有限公司高級軟件開發(fā)工程師。 專注于Java靜態(tài)編譯方向,主要負(fù)責(zé)Java靜態(tài)編譯技術(shù)在阿里巴巴生態(tài)中的應(yīng)用,并以落地實踐中發(fā)現(xiàn)的問題為切入點,向GraalVM社區(qū)貢獻(xiàn)了多項重要特性,是GraalVM社區(qū)建設(shè)的積極參與者;曾作為核心人員,負(fù)責(zé)將華為方舟編譯器前端的Java字節(jié)碼和Art Dex字節(jié)碼轉(zhuǎn)換為方舟中間語言的開發(fā)工作;曾受邀作為上海JUG2019報告嘉賓和北京QCon2020報告嘉賓,介紹GraalVM靜態(tài)編譯技術(shù);曾在編譯器領(lǐng)域國際頂級學(xué)術(shù)會議CGO 2021的Graal專項論壇中報告對Java序列化特性的靜態(tài)編譯支持實現(xiàn)。

圖書目錄

【第一部分 從解釋執(zhí)行到靜態(tài)編譯:Java的編譯發(fā)展之路】
第1章 Java靜態(tài)編譯技術(shù)的誕生2
1.1 Java程序的運行生命周期3
1.1.1 初始化4
1.1.2 程序預(yù)熱5
1.2 冷啟動問題8
1.3 初識Java靜態(tài)編譯技術(shù)11
1.3.1 什么是Java靜態(tài)編譯11
1.3.2 靜態(tài)編譯的優(yōu)勢12
1.3.3 靜態(tài)編譯的局限性13
1.4 小結(jié)15

第2章 Java靜態(tài)編譯的業(yè)界實現(xiàn)16
2.1 Oracle GraalVM16
2.1.1 GraalVM是什么17
2.1.2 GraalVM靜態(tài)編譯優(yōu)點19
2.1.3 GraalVM靜態(tài)編譯缺點20
2.1.4 GraalVM發(fā)展分析21
2.2 華為方舟編譯器22
2.3 小結(jié)24

第3章 GraalVM整體結(jié)構(gòu)25
3.1 子項目與組件25
3.2 GraalVM編譯系統(tǒng)工具mx29
3.3 在IDE中打開GraalVM32
3.4 小結(jié)33

第4章 從Java程序到本地代碼:靜態(tài)編譯應(yīng)用流程34
4.1 獲取GraalVM JDK35
4.1.1 下載發(fā)布版35
4.1.2 下載Docker鏡像37
4.2 從源碼編譯37
4.2.1 編譯準(zhǔn)備37
4.2.2 編譯38
4.3 獲取依賴庫40
4.4 預(yù)執(zhí)行目標(biāo)應(yīng)用程序41
4.5 靜態(tài)編譯目標(biāo)應(yīng)用程序43
4.5.1 命令行模式編譯43
4.5.2 配置文件模式45
4.5.3 Maven插件模式46
4.5.4 Gradle插件模式47
4.6 靜態(tài)編譯Java程序?qū)嵗?8
4.6.1 靜態(tài)編譯HelloWorld49
4.6.2 靜態(tài)編譯Spring Boot應(yīng)用實例50
4.7 小結(jié)52

【第二部分 靜態(tài)編譯實現(xiàn)原理】
第5章 Substrate VM靜態(tài)編譯框架54
5.1 靜態(tài)編譯啟動器55
5.2 靜態(tài)編譯實現(xiàn)流程57
5.2.1 類載入59
5.2.2 準(zhǔn)備60
5.2.3 靜態(tài)分析61
5.2.4 全局構(gòu)建63
5.2.5 編譯64
5.2.6 生成image65
5.2.7 寫文件65
5.3 Substrate VM運行時支持67
5.3.1 內(nèi)存管理67
5.3.2 系統(tǒng)信號處理機(jī)制69
5.4 小結(jié)70

第6章 Feature機(jī)制71
6.1 Feature機(jī)制概覽71
6.2 Feature管理73
6.2.1 注冊與調(diào)用Feature73
6.2.2 Feature依賴74
6.3 Feature影響編譯流程75
6.3.1 Feature函數(shù)的入?yún)⒒卣{(diào)75
6.3.2 訪問ImageSingletons單例庫76
6.4 GraalFeature實現(xiàn)靜態(tài)編譯優(yōu)化77
6.4.1 GraalVM編譯器基礎(chǔ)知識77
6.4.2 擴(kuò)展lowering79
6.4.3 注冊圖的擴(kuò)展插件79
6.5 Feature接口函數(shù)80
6.6 小結(jié)82

第7章 編譯時替換機(jī)制83
7.1 替換機(jī)制在Substrate VM中的應(yīng)用84
7.2 基于注解的替換85
7.2.1 替換類85
7.2.2 替換枚舉類型87
7.2.3 替換函數(shù)88
7.2.4 替換構(gòu)造函數(shù)89
7.2.5 替換類中的域90
7.2.6 替換類的靜態(tài)初始化函數(shù)92
7.3 實現(xiàn)原理93
7.3.1 替換機(jī)制責(zé)任鏈93
7.3.2 確定待替換元素集合96
7.3.3 自定義替換內(nèi)容98
7.4 小結(jié)98

第8章 類提前初始化優(yōu)化100
8.1 Java中的類初始化100
8.2 編譯時的類初始化101
8.2.1 類提前初始化的性能分析102
8.2.2 類提前初始化的安全性分析103
8.3 優(yōu)化實現(xiàn)原理106
8.3.1 早期階段分析107
8.3.2 中期階段分析109
8.3.3 后期階段分析111
8.4 手動設(shè)置類初始化時機(jī)112
8.5 小結(jié)113

第9章 反射的實現(xiàn)與優(yōu)化114
9.1 反射在傳統(tǒng)Java中的實現(xiàn)115
9.2 基于配置的支持119
9.2.1 反射配置文件119
9.2.2 配置局限性121
9.3 Substrate VM的反射實現(xiàn)122
9.3.1 解析配置并注冊反射信息123
9.3.2 反射函數(shù)常量折疊優(yōu)化124
9.3.3 函數(shù)反射調(diào)用過程優(yōu)化125
9.4 其他類似動態(tài)特性的支持126
9.4.1 JNI調(diào)用127
9.4.2 動態(tài)代理127
9.4.3 資源訪問128
9.4.4 序列化特性129
9.5 小結(jié)129

第10章 序列化131
10.1 序列化特性的JDK原生實現(xiàn)131
10.1.1 序列化/反序列化基本流程132
10.1.2 序列化中的靜態(tài)編譯不友好特性133
10.2 靜態(tài)編譯的序列化實現(xiàn)136
10.2.1 解決動態(tài)類加載問題136
10.2.2 解決new抽象類問題138
10.2.3 靜態(tài)初始化函數(shù)檢查139
10.3 局限性139
10.4 小結(jié)141

第11章 跨語言編程:用Java語言編寫共享庫142
11.1 樣例項目cinterfacetutorial 143
11.2 共享庫的Java實現(xiàn)源碼解析145
11.2.1 聲明共享庫上下文145
11.2.2 實現(xiàn)C基本數(shù)據(jù)結(jié)構(gòu)146
11.2.3 實現(xiàn)C的結(jié)構(gòu)體繼承149
11.2.4 暴露共享庫API149
11.2.5 直接調(diào)用C函數(shù)152
11.2.6 共享庫函數(shù)的返回值153
11.3 靜態(tài)編譯JNI共享庫153
11.3.1 JNIDemo項目組織結(jié)構(gòu)153
11.3.2 JNI庫API函數(shù)的聲明155
11.3.3 JNI函數(shù)編程基本過程156
11.3.4 JNI函數(shù)參數(shù)傳入String157
11.3.5 自定義JNI函數(shù)指針類型158
11.3.6 調(diào)用Java函數(shù)159
11.4 小結(jié)160

第12章 CLibrary機(jī)制161
12.1 isolate161
12.1.1 錯誤的多線程調(diào)用:簡單復(fù)用isolate162
12.1.2 正確的多線程調(diào)用:為每個線程新建isolate163
12.1.3 正確的多線程調(diào)用:映射線程與isolate164
12.2 WordBase接口系統(tǒng)165
12.3 注解系統(tǒng)167
12.3.1 @CContext注解167
12.3.2 @CEntryPoint注解172
12.3.3 @InvokeCFunctionPointer注解173
12.4 正確釋放內(nèi)存173
12.5 小結(jié)175

【第三部分 靜態(tài)編譯實戰(zhàn)】
第13章 靜態(tài)編譯Serverless應(yīng)用到阿里云函數(shù)計算平臺178
13.1 阿里云函數(shù)計算平臺178
13.2 靜態(tài)編譯基于Micronaut的Spring-Boot示例項目179
13.3 部署到阿里云180
13.4 性能比較180
13.5 小結(jié)182

第14章 native-image-agent的實現(xiàn)183
14.1 native-image-agent與JVMTI183
14.2 實現(xiàn)靜態(tài)編譯的JVMTI Agent185
14.3 native-image-agent的可用選項188
14.4 小結(jié)190

第15章 調(diào)試191
15.1 編譯debug版本的native image191
15.2 使用GDB調(diào)試native image193
15.2.1 啟動GDB194
15.2.2 增加函數(shù)斷點194
15.2.3 GDB TUI分屏界面195
15.2.4 單步調(diào)試197
15.2.5 查看Java對象的值197
15.3 小結(jié)199

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號