深入理解JVM位元組碼

深入理解JVM位元組碼

《深入理解JVM位元組碼》是機械工業出版社出版的圖書,作者是張亞

基本介紹

  • 作者:張亞
  • 出版時間:2020年5月
  • 出版社:機械工業出版社
  • 頁數:301 頁
  • ISBN:9787111653721
  • 定價:89 元
  • 裝幀:平裝
  • 原作品:深入理解JVM位元組碼
  • 叢書:Java核心技術系列
內容簡介,圖書目錄,作者簡介,

內容簡介

這是一本揭示JVM位元組碼“黑科技”的著作,它從原理和套用兩個維度深入剖析了JVM位元組碼。書中內容涉及JVM位元組碼的大部分套用場景,如Java性能最佳化、軟體防護與破解、APM等,通過大量實戰案例講解了它在這些場景中的實操技巧。 本書共 12 章,從邏輯上分為兩大部分。 第一部分:原理篇(第1~8章) 第1章詳細剖析了class檔案的內部結構;第2章介紹了位元組碼的概念以及Java虛擬機棧和棧幀的相關內容;第3章介紹了位元組碼的進階知識,包括泛型擦除、synchronized關鍵字、反射的底層實現原理;第4章介紹了javac編譯器的原理,以及javac編譯的七大階段和各階段的作用;第5章從位元組碼的角度介紹Kotlin的常見語法糖、coroutine等原理;第6章介紹了ASM和Javassist這兩個位元組碼操作工具;第7章介紹了Java Instrumentation的原理;第8章介紹了JSR 269外掛程式化註解處理原理。 第二部分:套用篇(第9~12章) 第9章介紹了位元組碼在cglib、Fastjson等框架上的套用;第10章介紹了反編譯、破解、防破解和逆向工程的相關內容;第11章介紹了APM的概況、分散式跟蹤的基本原理等;第12章詳細介紹了Android dex檔案的組成結構,以及Android位元組碼指令與Java位元組碼指令的區別。

圖書目錄

【原理篇】
第1章 深入剖析 class 檔案結構 1
1.1 初探 class 檔案 1
1.2 class 檔案結構剖析 3
1.2.1 魔數 4
1.2.2 版本號 6
1.2.3 常量池 7
1.2.4 Access flags 18
1.2.5 this_class、super_name、interfaces 19
1.2.6 欄位表 20
1.2.7 方法表 23
1.2.8 屬性表 25
1.3 使用 javap 查看類檔案 30
1.4 小結 32
第2章 位元組碼基礎 33
2.1位元組碼概述 33
2.2 Java 虛擬機棧和棧幀 34
2.3 位元組碼指令 41
2.3.1 載入和存儲指令 41
2.3.2 運算元棧指令 42
2.3.3 運算和類型轉換指令 45
2.3.4 控制轉移指令 46
2.3.5 for語句的位元組碼原理 48
2.3.6 switch-case底層實現原理 54
2.3.7 String的switch-case實現的位元組碼原理 55
2.3.8  i和i 的位元組碼原理 60
2.3.9 try-catch-finally的位元組碼原理 63
2.3.10 try-with-resources 的位元組碼原理 71
2.3.11 對象相關的位元組碼指令 74
2.4 小結 77
第3章 位元組碼進階 78
3.1 方法調用指令 78
3.1.1 invokestatic指令 79
3.1.2 invokevirtual指令 79
3.1.3 invokespecial指令 80
3.1.4 invokeinterface指令 80
3.1.5 invokedynamic指令 90
3.2 Lambda 表達式的原理 95
3.3 泛型與位元組碼 100
3.4 synchronized 的實現原理 102
3.5 反射的實現原理 106
3.5.1 反射方法源碼分析 107
3.5.2 反射的inflation機制 109
3.6 小結 110
第4章 javac 編譯原理簡介 111
4.1 javac 源碼調試 112
4.2 javac 的七個階段 114
4.2.1 parse階段 115
4.2.2 enter階段 116
4.2.3 process階段 118
4.2.4 attr階段 118
4.2.5 flow階段 121
4.2.6 desugar階段 122
4.2.7 generate階段 126
4.3 小結 129
第5章 從位元組碼角度看 Kotlin語言 130
5.1 Metadata 註解 130
5.2 頂層方法 132
5.3 object 單例 133
5.4 擴展方法 134
5.5 接口默認方法 135
5.6 默認參數 137
5.7 高級 for 循環 140
5.8 data class 142
5.9 多返回值 143
5.10 協程的實現原理 144
5.10.1 CPS 介紹 145
5.10.2 suspend 關鍵字 146
5.11 從位元組碼分析 Kotlin 編譯器的bug 149
5.12 小結 153
第6章 ASM 和 Javassist 位元組碼操作工具 154
6.1 ASM 介紹 154
6.1.1 ASM Core API核心類 156
6.1.2 ASM操作位元組碼示例 158
6.2 Javassist 介紹 169
6.2.1 Javassist核心API 169
6.2.2 Javassist操作位元組碼示例 170
6.3 小結 174
第7章 Java Instrumentation 原理 175
7.1 Java Instrumentation 簡介 175
7.2 Instrumentation 與 -javaagent啟動參數 176
7.3 JVM Attach API 介紹 180
7.3.1 JVM Attach API基本使用 181
7.3.2 JVM Attach API的底層原理 183
7.4 小結 190
第8章 JSR 269 外掛程式化註解處理原理 191
8.1 JSR 269 簡介 191
8.2 抽象語法樹操作 API 193
8.2.1 Names介紹 193
8.2.2 JCTree介紹 193
8.2.3 TreeMaker介紹 198
8.2.4 自定義註解處理實戰 202
8.3 JSR 269 在常用框架上的套用 207
8.3.1 案例一:ButterKnife 207
8.3.2 案例二:Lombok 209
8.4 小結 212
【套用篇】
第9章 位元組碼的套用 213
9.1 cglib 動態代理原理分析 213
9.2位元組碼在 Fastjson 上的套用 218
9.3 位元組碼在 Dubbo 上的套用 221
9.4 位元組碼在 JaCoCo 代碼覆蓋率上的套用 222
9.5 位元組碼在 Mock 上的套用 225
9.6 小結 227
第10章 軟體破解和防破解 228
10.1 反編譯 228
10.2 軟體破解 229
10.3 軟體防破解 234
10.4 小結 250
第11章 全鏈路分散式跟蹤與APM 251
11.1 全鏈路分散式跟蹤介紹 251
11.2 見微知著之 APM 260
11.3 小結 273
第12章 Android位元組碼與 APM 274
12.1 dex 檔案結構 274
12.2 Android位元組碼 288
12.3 Gradle 外掛程式編寫 295
12.4 Android位元組碼注入原理 297
12.5 小結 301

作者簡介

張亞 資深後端工程師和Java工程師,CVTE(視源股份,股票代碼:002841)高級技術經理,帶領20多人的研發團隊做教育相關的產品。 主要技術方向是JVM調優及故障診斷、TCP源碼剖析、高並發系統設計,致力於後端底層技術細節的研究。獨立實現了公司級全鏈路APM產品,在位元組碼、ASM、軟體破解等方向有豐富的實戰經驗。 vim狂熱愛好者,熱衷分享,是掘金平台的優秀作者,在掘金上撰寫過兩本關於JVM和TCP底層原理的小冊子。

相關詞條

熱門詞條

聯絡我們