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

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

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

定 價:¥89.00

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

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

內容簡介

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

作者簡介

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

圖書目錄

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

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

第4章 從Java程序到本地代碼:靜態(tài)編譯應用流程34
4.1 獲取GraalVM JDK35
4.1.1 下載發(fā)布版35
4.1.2 下載Docker鏡像37
4.2 從源碼編譯37
4.2.1 編譯準備37
4.2.2 編譯38
4.3 獲取依賴庫40
4.4 預執(zhí)行目標應用程序41
4.5 靜態(tài)編譯目標應用程序43
4.5.1 命令行模式編譯43
4.5.2 配置文件模式45
4.5.3 Maven插件模式46
4.5.4 Gradle插件模式47
4.6 靜態(tài)編譯Java程序實例48
4.6.1 靜態(tài)編譯HelloWorld49
4.6.2 靜態(tài)編譯Spring Boot應用實例50
4.7 小結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 準備60
5.2.3 靜態(tài)分析61
5.2.4 全局構建63
5.2.5 編譯64
5.2.6 生成image65
5.2.7 寫文件65
5.3 Substrate VM運行時支持67
5.3.1 內存管理67
5.3.2 系統(tǒng)信號處理機制69
5.4 小結70

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

第7章 編譯時替換機制83
7.1 替換機制在Substrate VM中的應用84
7.2 基于注解的替換85
7.2.1 替換類85
7.2.2 替換枚舉類型87
7.2.3 替換函數(shù)88
7.2.4 替換構造函數(shù)89
7.2.5 替換類中的域90
7.2.6 替換類的靜態(tài)初始化函數(shù)92
7.3 實現(xiàn)原理93
7.3.1 替換機制責任鏈93
7.3.2 確定待替換元素集合96
7.3.3 自定義替換內容98
7.4 小結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 手動設置類初始化時機112
8.5 小結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ù)反射調用過程優(yōu)化125
9.4 其他類似動態(tài)特性的支持126
9.4.1 JNI調用127
9.4.2 動態(tài)代理127
9.4.3 資源訪問128
9.4.4 序列化特性129
9.5 小結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 小結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ù)結構146
11.2.3 實現(xiàn)C的結構體繼承149
11.2.4 暴露共享庫API149
11.2.5 直接調用C函數(shù)152
11.2.6 共享庫函數(shù)的返回值153
11.3 靜態(tài)編譯JNI共享庫153
11.3.1 JNIDemo項目組織結構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 調用Java函數(shù)159
11.4 小結160

第12章 CLibrary機制161
12.1 isolate161
12.1.1 錯誤的多線程調用:簡單復用isolate162
12.1.2 正確的多線程調用:為每個線程新建isolate163
12.1.3 正確的多線程調用:映射線程與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 正確釋放內存173
12.5 小結175

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

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

本目錄推薦

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