注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)

深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)

深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)

定 價:¥129.00

作 者: 周志明 著
出版社: 機械工業(yè)出版社
叢編項: 華章原創(chuàng)精品
標 簽: 暫缺

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

內(nèi)容簡介

  這是一部從工作原理和工程實踐兩個維度深入剖析JVM的著作,是計算機領(lǐng)域公認的經(jīng)典,繁體版在臺灣也頗受歡迎。 自2011年上市以來,前兩個版本累計印刷36次,銷量超過30萬冊,兩家主要網(wǎng)絡(luò)書店的評論近90000條,內(nèi)容上近乎零差評,是原創(chuàng)計算機圖書領(lǐng)域不可逾越的豐碑。 第3版在第2版的基礎(chǔ)上做了重大修訂,內(nèi)容更豐富、實戰(zhàn)性更強:根據(jù)新版JDK對內(nèi)容進行了全方位的修訂和升級,圍繞新技術(shù)和生產(chǎn)實踐新增逾10萬字,包含近50%的全新內(nèi)容,并對第2版中含糊、瑕疵和錯誤內(nèi)容進行了修正。 全書一共13章,分為五大部分: 第一部分(第1章)走近Java 系統(tǒng)介紹了Java的技術(shù)體系、發(fā)展歷程、虛擬機家族,以及動手編譯JDK,了解這部分內(nèi)容能對學習JVM提供良好的指引。 第二部分(第2~5章)自動內(nèi)存管理 詳細講解了Java的內(nèi)存區(qū)域與內(nèi)存溢出、垃圾收集器與內(nèi)存分配策略、虛擬機性能監(jiān)控與故障排除等與自動內(nèi)存管理相關(guān)的內(nèi)容,以及10余個經(jīng)典的性能優(yōu)化案例和優(yōu)化方法; 第三部分(第6~9章)虛擬機執(zhí)行子系統(tǒng) 深入分析了虛擬機執(zhí)行子系統(tǒng),包括類文件結(jié)構(gòu)、虛擬機類加載機制、虛擬機字節(jié)碼執(zhí)行引擎,以及多個類加載及其執(zhí)行子系統(tǒng)的實戰(zhàn)案例; 第四部分(第10~11章)程序編譯與代碼優(yōu)化 詳細講解了程序的前、后端編譯與優(yōu)化,包括前端的易用性優(yōu)化措施,如泛型、主動裝箱拆箱、條件編譯等的內(nèi)容的深入分析;以及后端的性能優(yōu)化措施,如虛擬機的熱點探測方法、HotSpot 的即時編譯器、提前編譯器,以及各種常見的編譯期優(yōu)化技術(shù); 第五部分(第12~13章)高效并發(fā) 主要講解了Java實現(xiàn)高并發(fā)的原理,包括Java的內(nèi)存模型、線程與協(xié)程,以及線程安全和鎖優(yōu)化。 全書以實戰(zhàn)為導向,通過大量與實際生產(chǎn)環(huán)境相結(jié)合的案例分析和展示了解決各種Java技術(shù)難題的方案和技巧。

作者簡介

  周志明(博士) 資深Java技術(shù)專家-機器學習技術(shù)專家和企業(yè)級開發(fā)技術(shù)專家,現(xiàn)任遠光軟件研究院院長。 開源技術(shù)的積極倡導者和推動者,對計算機科學相關(guān)的多個領(lǐng)域都有深刻的見解,尤其是人工智能-Java技術(shù)和敏捷開發(fā)等,對虛擬機技術(shù)有非常深入的研究。 撰寫了《深入理解Java虛擬機》《深入理解OSGi》《智慧的疆界》等多本著作,翻譯了《Java虛擬機規(guī)范》等著作。其中《深入理解Java虛擬機》已累計印刷逾36次,總銷超過30萬冊,成為原創(chuàng)計算機專業(yè)圖書領(lǐng)域難以逾越的豐碑。

圖書目錄

目  錄 Contents
前言
致謝
第一部分 走近Java
第1章 走近Java 2
1.1 概述 2
1.2 Java技術(shù)體系 3
1.3 Java發(fā)展史 4
1.4 Java虛擬機家族 12
1.4.1 虛擬機始祖:Sun Classic/Exact VM 12
1.4.2 武林盟主:HotSpot VM 13
1.4.3 小家碧玉:Mobile/Embedded VM 14
1.4.4 天下第二:BEA JRockit/IBM J9 VM 15
1.4.5 軟硬合璧:BEA Liquid VM/Azul VM 16
1.4.6 挑戰(zhàn)者:Apache Harmony/Google Android Dalvik VM 17
1.4.7 沒有成功,但并非失敗:Microsoft JVM及其他 18
1.4.8 百家爭鳴 19
1.5 展望Java技術(shù)的未來 21
1.5.1 無語言傾向 21
1.5.2 新一代即時編譯器 23
1.5.3 向Native邁進 24
1.5.4 靈活的胖子 26
1.5.5 語言語法持續(xù)增強 27
1.6 實戰(zhàn):自己編譯JDK 29
1.6.1 獲取源碼 29
1.6.2 系統(tǒng)需求 31
1.6.3 構(gòu)建編譯環(huán)境 33
1.6.4 進行編譯 34
1.6.5 在IDE工具中進行源碼調(diào)試 36
1.7 本章小結(jié) 39
第二部分 自動內(nèi)存管理
第2章 Java內(nèi)存區(qū)域與內(nèi)存溢出異常 42
2.1 概述 42
2.2 運行時數(shù)據(jù)區(qū)域 42
2.2.1 程序計數(shù)器 43
2.2.2 Java虛擬機棧 43
2.2.3 本地方法棧 44
2.2.4 Java堆 44
2.2.5 方法區(qū) 46
2.2.6 運行時常量池 47
2.2.7 直接內(nèi)存 47
2.3 HotSpot虛擬機對象探秘 48
2.3.1 對象的創(chuàng)建 48
2.3.2 對象的內(nèi)存布局 51
2.3.3 對象的訪問定位 52
2.4 實戰(zhàn):OutOfMemoryError異常 53
2.4.1 Java堆溢出 54
2.4.2 虛擬機棧和本地方法棧溢出 56
2.4.3 方法區(qū)和運行時常量池溢出 61
2.4.4 本機直接內(nèi)存溢出 65
2.5 本章小結(jié) 66
第3章 垃圾收集器與內(nèi)存分配策略 67
3.1 概述 67
3.2 對象已死? 68
3.2.1 引用計數(shù)算法 68
3.2.2 可達性分析算法 70
3.2.3 再談引用 71
3.2.4 生存還是死亡? 72
3.2.5 回收方法區(qū) 74
3.3 垃圾收集算法 75
3.3.1 分代收集理論 75
3.3.2 標記-清除算法 77
3.3.3 標記-復制算法 78
3.3.4 標記-整理算法 79
3.4 HotSpot的算法細節(jié)實現(xiàn) 81
3.4.1 根節(jié)點枚舉 81
3.4.2 安全點 82
3.4.3 安全區(qū)域 83
3.4.4 記憶集與卡表 84
3.4.5 寫屏障 85
3.4.6 并發(fā)的可達性分析 87
3.5 經(jīng)典垃圾收集器 89
3.5.1 Serial收集器 90
3.5.2 ParNew收集器 92
3.5.3 Parallel Scavenge收集器 93
3.5.4 Serial Old收集器 94
3.5.5 Parallel Old收集器 95
3.5.6 CMS收集器 96
3.5.7 Garbage First收集器 98
3.6 低延遲垃圾收集器 104
3.6.1 Shenandoah收集器 105
3.6.2 ZGC收集器 112
3.7 選擇合適的垃圾收集器 121
3.7.1 Epsilon收集器 121
3.7.2 收集器的權(quán)衡 121
3.7.3 虛擬機及垃圾收集器日志 122
3.7.4 垃圾收集器參數(shù)總結(jié) 127
3.8 實戰(zhàn):內(nèi)存分配與回收策略 129
3.8.1 對象優(yōu)先在Eden分配 130
3.8.2 大對象直接進入老年代 131
3.8.3 長期存活的對象將進入老年代 132
3.8.4 動態(tài)對象年齡判定 134
3.8.5 空間分配擔保 135
3.9 本章小結(jié) 137
第4章 虛擬機性能監(jiān)控-故障處理工具 138
4.1 概述 138
4.2 基礎(chǔ)故障處理工具 138
4.2.1 jps:虛擬機進程狀況工具 141
4.2.2 jstat:虛擬機統(tǒng)計信息監(jiān)視工具 142
4.2.3 jinfo:Java配置信息工具 143
4.2.4 jmap:Java內(nèi)存映像工具 144
4.2.5 jhat:虛擬機堆轉(zhuǎn)儲快照分析工具 145
4.2.6 jstack:Java堆棧跟蹤工具 146
4.2.7 基礎(chǔ)工具總結(jié) 148
4.3 可視化故障處理工具 151
4.3.1 JHSDB:基于服務(wù)性代理的調(diào)試工具 152
4.3.2 JConsole:Java監(jiān)視與管理控制臺 157
4.3.3 VisualVM:多合-故障處理工具 164
4.3.4 Java Mission Control:可持續(xù)在線的監(jiān)控工具 171
4.4 HotSpot虛擬機插件及工具 175
4.5 本章小結(jié) 180
第5章 調(diào)優(yōu)案例分析與實戰(zhàn) 181
5.1 概述 181
5.2 案例分析 181
5.2.1 大內(nèi)存硬件上的程序部署策略 182
5.2.2 集群間同步導致的內(nèi)存溢出 184
5.2.3 堆外內(nèi)存導致的溢出錯誤 185
5.2.4 外部命令導致系統(tǒng)緩慢 187
5.2.5 服務(wù)器虛擬機進程崩潰 187
5.2.6 不恰當數(shù)據(jù)結(jié)構(gòu)導致內(nèi)存占用過大 188
5.2.7 由Windows虛擬內(nèi)存導致的長時間停頓 189
5.2.8 由安全點導致長時間停頓 190
5.3 實戰(zhàn):Eclipse運行速度調(diào)優(yōu) 192
5.3.1 調(diào)優(yōu)前的程序運行狀態(tài) 193
5.3.2 升級JDK版本的性能變化及兼容問題 196
5.3.3 編譯時間和類加載時間的優(yōu)化 200
5.3.4 調(diào)整內(nèi)存設(shè)置控制垃圾收集頻率 203
5.3.5 選擇收集器降低延遲 206
5.4 本章小結(jié) 209
第三部分 虛擬機執(zhí)行子系統(tǒng)
第6章 類文件結(jié)構(gòu) 212
6.1 概述 212
6.2 無關(guān)性的基石 212
6.3 Class類文件的結(jié)構(gòu) 214
6.3.1 魔數(shù)與Class文件的版本 215
6.3.2 常量池 218
6.3.3 訪問標志 224
6.3.4 類索引-父類索引與接口索引集合 225
6.3.5 字段表集合 226
6.3.6 方法表集合 229
6.3.7 屬性表集合 230
6.4 字節(jié)碼指令簡介 251
6.4.1 字節(jié)碼與數(shù)據(jù)類型 251
6.4.2 加載和存儲指令 253
6.4.3 運算指令 254
6.4.4 類型轉(zhuǎn)換指令 255
6.4.5 對象創(chuàng)建與訪問指令 256
6.4.6 操作數(shù)棧管理指令 256
6.4.7 控制轉(zhuǎn)移指令 257
6.4.8 方法調(diào)用和返回指令 257
6.4.9 異常處理指令 258
6.4.10 同步指令 258
6.5 公有設(shè)計,私有實現(xiàn) 259
6.6 Class文件結(jié)構(gòu)的發(fā)展 260
6.7 本章小結(jié) 261
第7章 虛擬機類加載機制 262
7.1 概述 262
7.2 類加載的時機 263
7.3 類加載的過程 267
7.3.1 加載 267
7.3.2 驗證 268
7.3.3 準備 271
7.3.4 解析 272
7.3.5 初始化 277
7.4 類加載器 279
7.4.1 類與類加載器 280
7.4.2 雙親委派模型 281
7.4.3 破壞雙親委派模型 285
7.5 Java模塊化系統(tǒng) 287
7.5.1 模塊的兼容性 288
7.5.2 模塊化下的類加載器 290
7.6 本章小結(jié) 292
第8章 虛擬機字節(jié)碼執(zhí)行引擎 293
8.1 概述 293
8.2 運行時棧幀結(jié)構(gòu) 294
8.2.1 局部變量表 294
8.2.2 操作數(shù)棧 299
8.2.3 動態(tài)連接 300
8.2.4 方法返回地址 300
8.2.5 附加信息 301
8.3 方法調(diào)用 301
8.3.1 解析 301
8.3.2 分派 303
8.4 動態(tài)類型語言支持 315
8.4.1 動態(tài)類型語言 316
8.4.2 Java與動態(tài)類型 317
8.4.3 java.lang.invoke包 318
8.4.4 invokedynamic指令 321
8.4.5 實戰(zhàn):掌控方法分派規(guī)則 324
8.5 基于棧的字節(jié)碼解釋執(zhí)行引擎 326
8.5.1 解釋執(zhí)行 327
8.5.2 基于棧的指令集與基于寄存器的指令集 328
8.5.3 基于棧的解釋器執(zhí)行過程 329
8.6 本章小結(jié) 334
第9章 類加載及執(zhí)行子系統(tǒng)的案例與實戰(zhàn) 335
9.1 概述 335
9.2 案例分析 335
9.2.1 Tomcat:正統(tǒng)的類加載器架構(gòu) 335
9.2.2 OSGi:靈活的類加載器架構(gòu) 338
9.2.3 字節(jié)碼生成技術(shù)與動態(tài)代理的實現(xiàn) 341
9.2.4 Backport工具:Java的時光機器 345
9.3 實戰(zhàn):自己動手實現(xiàn)遠程執(zhí)行功能 348
9.3.1 目標 348
9.3.2 思路 349
9.3.3 實現(xiàn) 350
9.3.4 驗證 355
9.4 本章小結(jié) 356
第四部分 程序編譯與代碼優(yōu)化
第10章 前端編譯與優(yōu)化 358
10.1 概述 358
10.2 Javac編譯器 359
10.2.1 Javac的源碼與調(diào)試 359
10.2.2 解析與填充符號表 362
10.2.3 注解處理器 363
10.2.4 語義分析與字節(jié)碼生成 364
10.3 Java語法糖的味道 367
10.3.1 泛型 367
10.3.2 自動裝箱-拆箱與遍歷循環(huán) 375
10.3.3 條件編譯 377
10.4 實戰(zhàn):插入式注解處理器 378
10.4.1 實戰(zhàn)目標 379
10.4.2 代碼實現(xiàn) 379
10.4.3 運行與測試 385
10.4.4 其他應用案例 386
10.5 本章小結(jié) 386
第11章 后端編譯與優(yōu)化 388
11.1 概述 388
11.2 即時編譯器 389
11.2.1 解釋器與編譯器 389
11.2.2 編譯對象與觸發(fā)條件 392
11.2.3 編譯過程 397
11.2.4 實戰(zhàn):查看及分析即時編譯結(jié)果 398
11.3 提前編譯器 404
11.3.1 提前編譯的優(yōu)劣得失 405
11.3.2 實戰(zhàn):Jaotc的提前編譯 408
11.4 編譯器優(yōu)化技術(shù) 411
11.4.1 優(yōu)化技術(shù)概覽 411
11.4.2 方法內(nèi)聯(lián) 415
11.4.3 逃逸分析 417
11.4.4 公共子表達式消除 420
11.4.5 數(shù)組邊界檢查消除 421
11.5 實戰(zhàn):深入理解Graal編譯器 423
11.5.1 歷史背景 423
11.5.2 構(gòu)建編譯調(diào)試環(huán)境 424
11.5.3 JVMCI編譯器接口 426
11.5.4 代碼中間表示 429
11.5.5 代碼優(yōu)化與生成 432
11.6 本章小結(jié) 436
第五部分 高效并發(fā)
第12章 Java內(nèi)存模型與線程 438
12.1 概述 438
12.2 硬件的效率與一致性 439
12.3 Java內(nèi)存模型 440
12.3.1 主內(nèi)存與工作內(nèi)存 441
12.3.2 內(nèi)存間交互操作 442
12.3.3 對于volatile型變量的特殊規(guī)則 444
12.3.4 針對long和double型變量的特殊規(guī)則 450
12.3.5 原子性-可見性與有序性 450
12.3.6 先行發(fā)生原則 452
12.4 Java與線程 455
12.4.1 線程的實現(xiàn) 455
12.4.2 Java線程調(diào)度 458
12.4.3 狀態(tài)轉(zhuǎn)換 460
12.5 Java與協(xié)程 461
12.5.1 內(nèi)核線程的局限 461
12.5.2 協(xié)程的復蘇 462
12.5.3 Java的解決方案 464
12.6 本章小結(jié) 465
第13章 線程安全與鎖優(yōu)化 466
13.1 概述 466
13.2 線程安全 466
13.2.1 Java語言中的線程安全 467
13.2.2 線程安全的實現(xiàn)方法 471
13.3 鎖優(yōu)化 479
13.3.1 自旋鎖與自適應自旋 479
13.3.2 鎖消除 480
13.3.3 鎖粗化 481
13.3.4 輕量級鎖 481
13.3.5 偏向鎖 483
13.4 本章小結(jié) 485
附錄A 在Windows系統(tǒng)下編譯OpenJDK 6 486
附錄B 展望Java技術(shù)的未來(2013年版) 493
附錄C 虛擬機字節(jié)碼指令表 499
附錄D 對象查詢語言(OQL)簡介 506
附錄E JDK歷史版本軌跡 512

本目錄推薦

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