深入淺出Java虛擬機(jī):JVM原理與實(shí)戰(zhàn)
本書主要以 Java 虛擬機(jī)的基本特性及運(yùn)行原理為中心,深入淺出地分析 JVM 的組成結(jié)構(gòu)和底層實(shí)現(xiàn),介紹了很多性能調(diào)優(yōu)的方案和工具的使用方法。最后還擴(kuò)展介紹了 JMM 內(nèi)存模型的實(shí)現(xiàn)原理和 Java 編譯器的優(yōu)化機(jī)制,讓讀者不僅可以學(xué)習(xí) JVM 的核心技術(shù)知識(shí),還能夯實(shí) JVM 調(diào)優(yōu)及代碼優(yōu)化的技術(shù)功底。
本書適合已具有一定 Java 編程基礎(chǔ)的開發(fā)人員、項(xiàng)目經(jīng)理、架構(gòu)師及性能調(diào)優(yōu)工程師參考閱讀,同時(shí),本書還可以作為廣大職業(yè)院校、計(jì)算機(jī)培訓(xùn)班相關(guān)專業(yè)的教學(xué)參考用書。
李博,資深架構(gòu)師,InfoQ平臺(tái)、阿里云社區(qū)專家博主,CSDN博客專家,51CTO講師,慕課網(wǎng)講師,Quarkus技術(shù)社區(qū)的熱衷參與者,參與過多個(gè)開源項(xiàng)目(Skywalking、Nacos、Pulsar等)的開發(fā)和深入研究。目前擔(dān)任公司內(nèi)部架構(gòu)委員會(huì)副主席,主要研究方向是“基于Quarkus的云原生Java微服務(wù)架構(gòu)的推進(jìn)”和“GraalVM虛擬機(jī)的內(nèi)部化落地”。
第1章?Java語言的起源 7
1.1?Java發(fā)展的艱辛歷程 8
1.2?Java散發(fā)的獨(dú)特魅力 10
1.3?網(wǎng)絡(luò)時(shí)代帶來的挑戰(zhàn) 12
1.4?Java生態(tài)的體系結(jié)構(gòu) 14
1.5?JVM的進(jìn)化發(fā)展史 17
1.6?小結(jié) 19
第2章?初次接觸JVM 20
2.1?通過Oracle JDK搭建運(yùn)行環(huán)境 21
2.2?通過Open JDK搭建運(yùn)行環(huán)境 29
2.3?Open JDK和Oracle JDK的關(guān)系 35
2.4?小結(jié) 36
第3章?邁向JVM的第一步 38
3.1?JVM內(nèi)部七大“首腦” 39
3.2?JVM外部有利“輔助” 43
3.3?JVM內(nèi)部對(duì)象的探索發(fā)掘 47
3.4?JVM的OOM異常 51
3.5?JVM的總體內(nèi)存結(jié)構(gòu)分布 54
3.6?小結(jié) 55
第4章?開始認(rèn)識(shí)類加載系統(tǒng) 56
4.1?類加載系統(tǒng)的整體生命周期和流程 57
4.2?類加載系統(tǒng)為我們帶來了什么 63
4.3?Class字節(jié)碼的組成 70
4.4?小結(jié) 80
第5章?進(jìn)入虛擬機(jī)核心世界 81
5.1?堆內(nèi)存的“管轄范圍” 82
5.2?內(nèi)存管理系統(tǒng)回收垃圾 86
5.3?垃圾回收的類型 98
5.4?方法區(qū) 101
5.5?執(zhí)行引擎子系統(tǒng) 105
5.6?對(duì)象描點(diǎn)標(biāo)記的方法 107
5.7?對(duì)象描點(diǎn)標(biāo)記的方法 110
5.8?小結(jié) 113
第6章?永遠(yuǎn)線程安全的區(qū)域 114
6.1?虛擬機(jī)棧和PC寄存器 115
6.2?虛擬機(jī)執(zhí)行機(jī)制介紹 118
6.3?小結(jié) 122
第7章?虛擬機(jī)字節(jié)碼指令集 123
7.1?字節(jié)碼指令概述 124
7.2?字節(jié)碼指令執(zhí)行案例分析 134
7.3?小結(jié) 137
第8章?JVM深入分析運(yùn)作原理 138
8.1?內(nèi)存分配及回收的依據(jù) 139
8.2?內(nèi)存分配及回收的策略 143
8.3?小結(jié) 146
第9章?JVM分析工具大全 147
9.1?JVM分析工具概述 148
9.2?常用JVM圖形化分析工具概述 159
9.3?JVM在線性能分析服務(wù) 166
9.4?小結(jié) 172
第10章?Arthas分析JVM問題定位 173
10.1?Arthas學(xué)習(xí)指南 174
10.2?Arthas分析OOM問題定位 182
10.3?Arthas分析FullGC問題定位 185
10.4?Arthas分析線程方面問題定位 187
10.5?小結(jié) 190
第11章?程序的編譯和代碼優(yōu)化 191
11.1?Java體系的3種編譯器 192
11.2?JIT編譯器 194
11.3?AOT編譯器 199
11.4?編譯技術(shù)的優(yōu)化 200
11.5?逃逸分析技術(shù) 207
11.6?小結(jié) 212
第12章?Java內(nèi)存模型和線程運(yùn)作原理 213
12.1?Java內(nèi)存模型 214
12.2?線程實(shí)現(xiàn) 223
12.3?線程安全控制 227
12.4?線程的鎖優(yōu)化 228
12.5?小結(jié) 231