3dwoo大學簡體電腦書店
深入解析Java虛擬機HotSpot
( 簡體 字)
作者:楊易類別:1. -> 程式設計 -> JAVA -> Java
出版社:機械工業出版社深入解析Java虛擬機HotSpot 3dWoo書號: 53879
詢問書籍請說出此書號!
有庫存
NT售價: 395
出版日:12/1/2020
頁數:257
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787111670315 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第1章 Java大觀園 1
1.1 OpenJDK 1
1.2 JEP 2
1.3 Java虛擬機 4
1.4 HotSpot VM 5
1.4.1 源碼模塊 7
1.4.2 構建和調試 7
1.4.3 回歸測試 12
1.5 Graal VM 14
1.6 本章小結 16
第2章 類可用機制 17
2.1 類的加載 17
2.1.1 字節碼 17
2.1.2 類加載器 19
2.1.3 文件解析 21
2.2 類的鏈接 23
2.2.1 字節碼驗證 24
2.2.2 字節碼重寫 24
2.2.3 方法鏈接 26
2.3 類的初始化 32
2.4 類的重定義 35
2.5 本章小結 36
第3章 對象和類 38
3.1 對象與類 38
3.2 對象 39
3.2.1 創建對象 39
3.2.2 對象頭 41
3.2.3 對象哈希值 43
3.3 類 44
3.3.1 字段遍歷 45
3.3.2 虛表 46
3.4 本章小結 48
第4章 運行時 49
4.1 線程創生紀 49
4.1.1 容器化支持 51
4.1.2 Java線程 52
4.1.3 虛擬機線程 54
4.1.4 編譯器線程 57
4.1.5 服務線程 58
4.1.6 計時器線程 58
4.2 Java線程 58
4.2.1 線程啟動 60
4.2.2 線程停止 61
4.2.3 睡眠與中斷 63
4.3 棧幀 66
4.4 Java/JVM溝通 68
4.4.1 JNI 69
4.4.2 JavaCalls 72
4.5 Unsafe類 74
4.5.1 堆外內存 75
4.5.2 內存屏障 75
4.5.3 阻塞和喚醒 76
4.5.4 對象數據修改 76
4.6 本章小結 77
第5章 模板解釋器 78
5.1 解釋器體系 78
5.1.1 C++解釋器行為 78
5.1.2 模板解釋器行為 79
5.2 機器代碼片段 81
5.3 CodeCache 82
5.4 指令緩存刷新 84
5.5 解釋器生成 86
5.5.1 普通方法入口 86
5.5.2 方法加鎖 89
5.5.3 本地方法入口 90
5.5.4 標準字節碼 91
5.5.5 非標準字節碼 106
5.6 本章小結 107
第6章 并發設施 108
6.1 指令重排序 108
6.1.1 編譯器重排序 109
6.1.2 處理器重排序 110
6.2 內存模型 112
6.2.1 happens-before內存模型 113
6.2.2 Java內存模型 114
6.3 基礎設施 116
6.3.1 原子操作 116
6.3.2 ParkEvent 116
6.3.3 Parker 118
6.3.4 Monitor 120
6.4 鎖優化 126
6.4.1 偏向鎖 127
6.4.2 基本對象鎖 128
6.4.3 重量級鎖 128
6.4.4 RTM鎖 131
6.5 本章小結 132
第7章 編譯概述 133
7.1 編譯器簡介 133
7.1.1 運行時代碼生成 134
7.1.2 JIT編譯器 135
7.1.3 AOT編譯器 136
7.1.4 JVMCI JIT編譯器 136
7.2 即時編譯技術 137
7.2.1 分層編譯 137
7.2.2 棧上替換 138
7.2.3 退優化 139
7.3 編譯理論基礎 139
7.3.1 中間表示 139
7.3.2 基本塊與控制流圖 140
7.3.3 靜態單賦值 142
7.3.4 規范化 142
7.3.5 值編號 143
7.3.6 自頂向下重寫系統 144
7.3.7 循環不變代碼外提概述 144
7.4 調試方法 145
7.4.1 編譯日志 145
7.4.2 編譯神諭 146
7.4.3 可視化工具 146
7.5 本章小結 149
第8章 C1編譯器 150
8.1 編譯流程 150
8.1.1 進入C1 150
8.1.2 高級中間表示 152
8.1.3 低級中間表示 153
8.2 從字節碼到HIR 155
8.2.1 識別基本塊 155
8.2.2 抽象解釋 156
8.3 HIR代碼優化 158
8.3.1 規范化 158
8.3.2 內聯 159
8.3.3 基本塊優化 160
8.3.4 值編號 160
8.3.5 數組范圍檢查 162
8.3.6 循環不變代碼外提 162
8.4 從HIR到LIR 164
8.4.1 return生成 165
8.4.2 new生成 165
8.4.3 goto生成 166
8.4.4 線性掃描寄存器分配 167
8.5 本章小結 171
第9章 C2編譯器 172
9.1 編譯流程 172
9.1.1 進入C2 172
9.1.2 理想圖 174
9.1.3 理想圖流程概述 180
9.1.4 C2代碼優化 183
9.1.5 代碼生成流程 185
9.1.6 設置機器代碼 186
9.2 構造理想圖 187
9.2.1 構造示例 187
9.2.2 Identity、Ideal、GVN 191
9.3 機器無關優化 193
9.3.1 IGVN 193
9.3.2 逃逸分析 194
9.3.3 向量化 197
9.4 代碼生成 199
9.4.1 指令選擇 199
9.4.2 圖著色寄存器分配 200
9.5 本章小結 203
第10章 垃圾回收 204
10.1 垃圾回收基礎概述 204
10.1.1 GC Root 205
10.1.2 安全點 206
10.1.3 線程局部握手 208
10.1.4 GC屏障 209
10.2 Epsilon GC 209
10.2.1 源碼結構 209
10.2.2 EpsilonHeap 210
10.2.3 對象分配 211
10.2.4 回收垃圾 212
10.3 Serial GC 212
10.3.1 弱分代假說 212
10.3.2 卡表 213
10.3.3 Young GC 214
10.3.4 Full GC 218
10.3.5 世界停頓 221
10.4 Parallel GC 221
10.4.1 多線程垃圾回收 221
10.4.2 GC任務管理器 223
10.4.3 并行與并發 226
10.5 CMS GC 227
10.5.1 回收策略 227
10.5.2 對象丟失問題 228
10.5.3 Old GC周期 229
10.5.4 并發模式失敗 234
10.5.5 堆碎片化 235
10.6 G1 GC 235
10.6.1 簡介 235
10.6.2 混合回收 236
10.7 Shenandoah GC 237
10.8 ZGC 239
10.9 本章小結 241
第11章 G1 GC 242
11.1 G1 GC簡介 242
11.1.1 基于Region的堆 242
11.1.2 記憶集RSet 243
11.1.3 停頓預測模型 244
11.2 Young GC 245
11.2.1 選擇CSet 245
11.2.2 清理根集 246
11.2.3 處理RSet 247
11.2.4 對象復制 247
11.3 Mixed GC 248
11.3.1 SATB 249
11.3.2 全局并發標記 251
11.3.3 對象復制 254
11.4 Full GC 254
11.5 字符串去重 255
11.6 本章小結 257
很多JVM的底層技術細節你是否只了解表面?

面對JVM Crash或性能調優方面的問題時你是否會束手無策?

面對上層Java應用發生的偏離預期的行為時你是否會不知所措?

……

本書以源碼分析為基礎,從運行時、即時編譯器、垃圾回收器3個維度全面、深入解析HotSpot VM的底層實現和工作機制,同時與上層的Java語言和庫結合,指導讀者解決JVM開發、調優和排錯方面遇到的各種問題。

廣度與深度兼顧:廣度上涵蓋Graal VM、CDS、Instrumentation、編譯重放、非標準字節碼、RTM鎖、JIT調試工具、EpsilonGC/ShenandoahGC/ZGC、G1字符串去重等重要知識點;深度上深入解析了C1、C2、G1 GC、ObjectMonitor、Mutex、模板解釋器等的底層實現。

全書共 11 章,參考 OpenJDK 社區的劃分方式來組織內容,分為運行時、即時編譯器、垃圾回收器三個部分。

第一部分(第1~6章) 運行時

首先,從Java生態系統的角度,簡單介紹了JDK、JVM、JEP、HotSpot VM、Graal VM,引導讀者快速進入Java虛擬機的世界;然后從源碼的角度深入解析了HotSpot VM的類可用機制、對象與類、運行時、模板解釋器和并發設施。

第二部分(第7~9章) 即時編譯器

首先重點介紹了即時編譯器技術、編譯理論、編譯器調試方法等編譯器的基礎知識;然后詳細講解了C1和C2兩個即時編譯器的實現原理、工作機制和優化方法。

第三部分(第10~11章) 垃圾回收器

首先全面介紹了Epsilon GC、Serial GC、Parallel GC、CMS GC、G1 GC、Shenandoah GC、ZGC等各種垃圾回收器,然后重點剖析了G1 GC。
為何寫作本書

Java語言已經走過了20多個年頭,在此期間雖然新語言層出不窮,但是都沒有撼動Java的位置。可能是歷史選擇了Java,也可能是Java改變了歷史,總之,Java無疑是一門成功的編程語言。這門語言之所以能如此成功,高性能語言虛擬機HotSpot功不可沒。

客觀地說,HotSpot VM是目前頂級的語言虛擬機之一,它的模板解釋器是語言解釋器的最終狀態,除非有重大技術突破和方法論的改變,否則很難被超越。它的垃圾回收器也日臻完善,新的無停頓GC的出現標志著JVM正在邁向GC頂級俱樂部。它的即時編譯器是權衡編譯開銷與應用吞吐量后得到的一個卓越且精湛的藝術品。

本書始于筆者博客上的系列文章,隨著博文連載,便想將博文整理成冊,以系統性地討論HotSpot VM。鑒于OpenJDK社區將HotSpot VM分為運行時、編譯器、垃圾回收器三個部分,本書也采用這種劃分方式來組織內容。

本書讀者對象

本書內容涉及較多的源碼分析,所以除了需要讀者具有基本的Java/JVM知識,也需要讀者具有基本的C++語言常識。本書適合那些希望在Java語言方面有進一步提升的開發者,也適合任何對JVM底層感興趣且想要一探究竟的開發者。同時,對編譯器或垃圾回收器感興趣的讀者也能從中受益。

本書特色

本書既考慮到內容的廣度也關注了技術的深度,詳細描述了虛擬機的底層實現,并與上層Java語言或者庫結合,以實用為目標展開介紹,同時還討論了它們的深刻意義。

從內容廣度的角度看,本書除了討論耳熟能詳的Java虛擬機技術外,還詳細討論了業界最新的通用虛擬機平臺Graal VM、CDS/AppCDS/DynamicCDS、Instrumentation庫、編譯重放、非標準字節碼、棧上替換,RTM鎖、JIT編譯器IR、JIT編譯器可視化工具、編譯逃離、EpsilonGC/ShenandoahGC/ZGC、G1字符串去重等技術,其中部分技術代表了社區的最新動向。

從內容深度的角度看,本書詳細討論了:

G1 GC的回收策略和底層代碼實現;

C1編譯器的HIR和LIR,以及針對不同IR上應用的優化;

C2編譯器的Ideal Graph以及平臺無關的優化技術;

CPU重排序與ObjectMonitor、Mutex的底層實現;

模板解釋器的代碼片段生成邏輯和字節碼模板生成邏輯;

……

其中涉及的部分技術是Java虛擬機高性能的最終保證。

如何閱讀本書

本書共11章,參考OpenJDK社區的劃分方式,全書從邏輯上可分為運行時、編譯器、垃圾回收器三個部分。

第一部分(第1~6章),介紹Java虛擬機運行時的相關知識;

第二部分(第7~9章),介紹編譯基礎知識和虛擬機的兩個即時編譯器;

第三部分(第10~11章),介紹各種垃圾回收器并深入分析G1 GC。

每個部分總體側重某一個大的方向,但每個章節的獨立性都較強,各章節間沒有必然的聯系。對于Java虛擬機相關技術知識儲備充足、經驗豐富的讀者,可以按目錄“索驥”,選擇自己感興趣的內容閱讀。當然,推薦從第1章開始順序閱讀。

另外,因為HotSpot源碼很多,出于篇幅考慮,本書在進行代碼分析時,大多只給出了代碼片段或者主要的函數名稱,故建議讀者使用帶有全局文本搜索功能的編輯器或者IDE(如VSCode、IntelliJ IDEA、Sublime Text)來閱讀本書。

資源和勘誤

由于水平有限,加之時間倉促,書中難免存在疏漏和錯誤之處,在此懇請讀者批評指正,勘誤、建議、技術討論請致信,愿與讀者共同進步。

致謝

感謝機械工業出版社華章公司楊福川編輯在本書選題和方向上給予的肯定和支持,感謝李藝編輯對本書行文措辭的潤色和修改,他們的幫助、支持給予了我不竭的動力。

感謝我的同事和同學,與他們進行的“蘇格拉底式”的討論讓我了解了自身知識的缺陷和漏洞。

感謝彭飛認真細致地審稿,他利用業余時間審閱并幫助我完善了第二部分編譯相關的內容。

感謝我的父母和女朋友,他們是我最珍視的人,是永遠支持我的人。

本書寫作歷時一年有余,寫作期間得到了許多朋友的幫助和支持,在此表示衷心感謝。
pagetop