●前言
章深入剖析class文件結構1
1.1初探class文件1
1.2class文件結構剖析3
1.2.1魔數4
1.2.2版本號6
1.2.3常量池7
1.2.4Accessflags18
1.2.5this_class、super_name、interfaces19
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.2Java虛擬機棧和棧幀34
2.3字節碼指令41
2.3.1加載和存儲指令41
2.3.2操作數棧指令42
2.3.3運算和類型轉換指令45
2.3.4控制轉移指令46
2.3.5for語句的字節碼原理48
2.3.6switch-case底層實現原理54
2.3.7String的switch-case實現的字節碼原理55
2.3.8i和i的字節碼原理60
2.3.9try-catch-finally的字節碼原理63
2.3.10try-with-resources的字節碼原理71
2.3.11對像相關的字節碼指令74
2.4小結77
第3章字節碼進階78
3.1方法調用指令78
3.1.1invokestatic指令79
3.1.2invokevirtual指令79
3.1.3invokespe指令80
3.1.4invokeinterface指令80
3.1.5invokedynamic指令90
3.2Lambda表達式的原理95
3.3泛型與字節碼100
3.4synchronized的實現原理102
3.5反射的實現原理106
3.5.1反射方法源碼分析107
3.5.2反射的inflation機制109
3.6小結110
第4章javac編譯原理簡介111
4.1javac源碼調試112
4.2javac的七個階段114
4.2.1parse階段115
4.2.2enter階段116
4.2.3process階段118
4.2.4attr階段118
4.2.5flow階段121
4.2.6desugar階段122
4.2.7generate階段126
4.3小結129
第5章從字節碼角度看Kotlin語言130
5.1Metadata注解130
5.2頂層方法132
5.3object單例133
5.4擴展方法134
5.5接口默認方法135
5.6默認參數137
5.7不錯for循環140
5.8dataclass142
5.9多返回值143
5.10協程的實現原理144
5.10.1CPS介紹145
5.10.2suspend關鍵字146
5.11從字節碼分析Kotlin編譯器的bug149
5.12小結153
第6章ASM和Javassist字節碼操作工具154
6.1ASM介紹154
6.1.1ASMCoreAPI核心類156
6.1.2ASM操作字節碼示例158
6.2Javassist介紹169
6.2.1Javassist核心API169
6.2.2Javassist操作字節碼示例170
6.3小結174
第7章JavaInstrumentation原理175
7.1JavaInstrumentation簡介175
7.2Instrumentation與-javaagent啟動參數176
7.3JVMAttachAPI介紹180
7.3.1JVMAttachAPI基本使用181
7.3.2JVMAttachAPI的底層原理183
7.4小結190
第8章JSR269插件化注解處理原理191
8.1JSR269簡介191
8.2抽像語法樹操作API193
8.2.1Names介紹193
8.2.2JCTree介紹193
8.2.3TreeMaker介紹198
8.2.4自定義注解處理實戰202
8.3JSR269在常用框架上的應用207
8.3.1案例一:ButterKnife207
8.3.2案例二:Lombok209
8.4小結212
第9章字節碼的應用213
9.1cglib動態代理原理分析213
9.2字節碼在Fastjson上的應用218
9.3字節碼在Dubbo上的應用221
9.4字節碼在JaCoCo代碼覆蓋率上的應用222
9.5字節碼在Mock上的應用225
9.6小結227
0章軟件破解和防破解228
10.1反編譯228
10.2軟件破解229
10.3軟件防破解234
10.4小結250
1章全鏈路分布式跟蹤與APM251
11.1全鏈路分布式跟蹤介紹251
11.2見微知著之APM260
11.3小結273
2章Android字節碼與APM274
12.1dex文件結構274
12.2Android字節碼288
12.3Gradle插件編寫295
12.4Android字節碼注入原理297
12.5小結301
內容簡介
這是一本揭示JVM字節碼“黑科技”的著作,它從原理和應用兩個維度深入剖析了JVM字節碼。書中內容涉及JVM字節碼的大部分應用場景,如Java性能優化、軟件防護與破解、APM等,通過大量實戰案例講解了它在這些場景中的實操技巧。本書共12章,從邏輯上分為兩大部分。部分:原理篇(~8章)章詳細剖析了class文件的內部結構;第2章介紹了字節碼的概念以及Java虛擬機棧和棧幀的相關內容;第3章介紹了字節碼的進階知識,包括泛型擦除、synchronized關鍵字、反射的底層實現原理;第4章介紹了javac編譯器的原理,以及javac編譯的七大階段和各階段的作用;第5章從字節碼的角度介紹Kotlin的常見語法糖、coroutine等原理;第6章介紹了ASM和Javassist這兩個字節碼操作工具;第7章介紹了JavaInstrumentation的原理;第8章介紹了JSR269插件化注解處理原理。第二......