關(guān)于我們
書單推薦
新書推薦
|
深入理解Java虛擬機(jī):JVM高級特性與最佳實(shí)踐(第3版) 這是一部從工作原理和工程實(shí)踐兩個(gè)維度深入剖析JVM的著作,是計(jì)算機(jī)領(lǐng)域公認(rèn)的經(jīng)典,繁體版在臺灣也頗受歡迎。 自2011年上市以來,前兩個(gè)版本累計(jì)印刷36次,銷量超過30萬冊,兩家主要網(wǎng)絡(luò)書店的評論近90000條,內(nèi)容上近乎零差評,是原創(chuàng)計(jì)算機(jī)圖書領(lǐng)域不可逾越的豐碑。 第3版在第2版的基礎(chǔ)上做了重大修訂,內(nèi)容更豐富、實(shí)戰(zhàn)性更強(qiáng):根據(jù)新版JDK對內(nèi)容進(jìn)行了全方位的修訂和升級,圍繞新技術(shù)和生產(chǎn)實(shí)踐新增逾10萬字,包含近50%的全新內(nèi)容,并對第2版中含糊、瑕疵和錯(cuò)誤內(nèi)容進(jìn)行了修正。 全書一共13章,分為五大部分: *部分(第1章)走近Java 系統(tǒng)介紹了Java的技術(shù)體系、發(fā)展歷程、虛擬機(jī)家族,以及動手編譯JDK,了解這部分內(nèi)容能對學(xué)習(xí)JVM提供良好的指引。 第二部分(第2~5章)自動內(nèi)存管理 詳細(xì)講解了Java的內(nèi)存區(qū)域與內(nèi)存溢出、垃圾收集器與內(nèi)存分配策略、虛擬機(jī)性能監(jiān)控與故障排除等與自動內(nèi)存管理相關(guān)的內(nèi)容,以及10余個(gè)經(jīng)典的性能優(yōu)化案例和優(yōu)化方法; 第三部分(第6~9章)虛擬機(jī)執(zhí)行子系統(tǒng) 深入分析了虛擬機(jī)執(zhí)行子系統(tǒng),包括類文件結(jié)構(gòu)、虛擬機(jī)類加載機(jī)制、虛擬機(jī)字節(jié)碼執(zhí)行引擎,以及多個(gè)類加載及其執(zhí)行子系統(tǒng)的實(shí)戰(zhàn)案例; 第四部分(第10~11章)程序編譯與代碼優(yōu)化 詳細(xì)講解了程序的前、后端編譯與優(yōu)化,包括前端的易用性優(yōu)化措施,如泛型、主動裝箱拆箱、條件編譯等的內(nèi)容的深入分析;以及后端的性能優(yōu)化措施,如虛擬機(jī)的熱點(diǎn)探測方法、HotSpot 的即時(shí)編譯器、提前編譯器,以及各種常見的編譯期優(yōu)化技術(shù); 第五部分(第12~13章)高效并發(fā) 主要講解了Java實(shí)現(xiàn)高并發(fā)的原理,包括Java的內(nèi)存模型、線程與協(xié)程,以及線程安全和鎖優(yōu)化。 全書以實(shí)戰(zhàn)為導(dǎo)向,通過大量與實(shí)際生產(chǎn)環(huán)境相結(jié)合的案例分析和展示了解決各種Java技術(shù)難題的方案和技巧。 (1)這本書值得所有Java技術(shù)人員讀3遍,值得Java技術(shù)人員讀3遍,值得讀3遍! (2)根據(jù)JDK12和JDK 13 EA版本全面更新,新增內(nèi)容近50%,并對第2版中含糊、瑕疵和錯(cuò)誤內(nèi)容進(jìn)行了修正。 (3)計(jì)算機(jī)圖書領(lǐng)域的豐碑,前兩版累計(jì)印刷36次,銷量超過30萬冊,兩家網(wǎng)店評論數(shù)量超過90000條,內(nèi)容近乎零差評。 (4)從Java技術(shù)體系、自動內(nèi)存管理、虛擬機(jī)執(zhí)行子系統(tǒng)、程序編譯與代碼優(yōu)化、高效并發(fā)5個(gè)維度全面分析JVM。 (5)全書以實(shí)戰(zhàn)為導(dǎo)向,通過大量與實(shí)際生產(chǎn)環(huán)境相結(jié)合的案例分析和展示了解決各種Java技術(shù)難題的方案和技巧。 (6)來自阿里、騰訊、微軟、百度、滴滴、易寶支付、同盾科技、達(dá)觀數(shù)據(jù)、易觀國際、蘑菇街的10位專家高度評價(jià)并強(qiáng)烈推薦。 Java是目前用戶最多、使用范圍最廣的軟件開發(fā)技術(shù),Java的技術(shù)體系主要由支撐Java程序運(yùn)行的虛擬機(jī)、提供各開發(fā)領(lǐng)域接口支持的Java類庫、Java編程語言及許許多多的第三方Java框架(如Spring、MyBatis等)構(gòu)成。在國內(nèi),有關(guān)Java類庫API、Java語言語法及第三方框架的技術(shù)資料和書籍非常豐富,相比而言,有關(guān)Java虛擬機(jī)的資料卻顯得異常貧乏。
周志明 周志明(博士) 資深Java技術(shù)專家、機(jī)器學(xué)習(xí)技術(shù)專家和企業(yè)級開發(fā)技術(shù)專家,現(xiàn)任遠(yuǎn)光軟件研究院院長。 開源技術(shù)的積極倡導(dǎo)者和推動者,對計(jì)算機(jī)科學(xué)相關(guān)的多個(gè)領(lǐng)域都有深刻的見解,尤其是人工智能、Java技術(shù)和敏捷開發(fā)等,對虛擬機(jī)技術(shù)有非常深入的研究。 撰寫了《深入理解Java虛擬機(jī)》《深入理解OSGi》《智慧的疆界》等多本著作,翻譯了《Java虛擬機(jī)規(guī)范》等著作。其中《深入理解Java虛擬機(jī)》已累計(jì)印刷逾36次,總銷超過30萬冊,成為原創(chuàng)計(jì)算機(jī)專業(yè)圖書領(lǐng)域難以逾越的豐碑。 目 錄 Contents 前言 致謝 第一部分 走近Java 第1章 走近Java 2 1.1 概述 2 1.2 Java技術(shù)體系 3 1.3 Java發(fā)展史 4 1.4 Java虛擬機(jī)家族 12 1.4.1 虛擬機(jī)始祖: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 沒有成功,但并非失。篗icrosoft JVM及其他 18 1.4.8 百家爭鳴 19 1.5 展望Java技術(shù)的未來 21 1.5.1 無語言傾向 21 1.5.2 新一代即時(shí)編譯器 23 1.5.3 向Native邁進(jìn) 24 1.5.4 靈活的胖子 26 1.5.5 語言語法持續(xù)增強(qiáng) 27 1.6 實(shí)戰(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 進(jìn)行編譯 34 1.6.5 在IDE工具中進(jìn)行源碼調(diào)試 36 1.7 本章小結(jié) 39 第二部分 自動內(nèi)存管理 第2章 Java內(nèi)存區(qū)域與內(nèi)存溢出異常 42 2.1 概述 42 2.2 運(yùn)行時(shí)數(shù)據(jù)區(qū)域 42 2.2.1 程序計(jì)數(shù)器 43 2.2.2 Java虛擬機(jī)棧 43 2.2.3 本地方法棧 44 2.2.4 Java堆 44 2.2.5 方法區(qū) 46 2.2.6 運(yùn)行時(shí)常量池 47 2.2.7 直接內(nèi)存 47 2.3 HotSpot虛擬機(jī)對象探秘 48 2.3.1 對象的創(chuàng)建 48 2.3.2 對象的內(nèi)存布局 51 2.3.3 對象的訪問定位 52 2.4 實(shí)戰(zhàn):OutOfMemoryError異常 53 2.4.1 Java堆溢出 54 2.4.2 虛擬機(jī)棧和本地方法棧溢出 56 2.4.3 方法區(qū)和運(yùn)行時(shí)常量池溢出 61 2.4.4 本機(jī)直接內(nèi)存溢出 65 2.5 本章小結(jié) 66 第3章 垃圾收集器與內(nèi)存分配策略 67 3.1 概述 67 3.2 對象已死? 68 3.2.1 引用計(jì)數(shù)算法 68 3.2.2 可達(dá)性分析算法 70 3.2.3 再談引用 71 3.2.4 生存還是死亡? 72 3.2.5 回收方法區(qū) 74 3.3 垃圾收集算法 75 3.3.1 分代收集理論 75 3.3.2 標(biāo)記-清除算法 77 3.3.3 標(biāo)記-復(fù)制算法 78 3.3.4 標(biāo)記-整理算法 79 3.4 HotSpot的算法細(xì)節(jié)實(shí)現(xiàn) 81 3.4.1 根節(jié)點(diǎn)枚舉 81 3.4.2 安全點(diǎn) 82 3.4.3 安全區(qū)域 83 3.4.4 記憶集與卡表 84 3.4.5 寫屏障 85 3.4.6 并發(fā)的可達(dá)性分析 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 虛擬機(jī)及垃圾收集器日志 122 3.7.4 垃圾收集器參數(shù)總結(jié) 127 3.8 實(shí)戰(zhàn):內(nèi)存分配與回收策略 129 3.8.1 對象優(yōu)先在Eden分配 130 3.8.2 大對象直接進(jìn)入老年代 131 3.8.3 長期存活的對象將進(jìn)入老年代 132 3.8.4 動態(tài)對象年齡判定 134 3.8.5 空間分配擔(dān)保 135 3.9 本章小結(jié) 137 第4章 虛擬機(jī)性能監(jiān)控、故障處理工具 138 4.1 概述 138 4.2 基礎(chǔ)故障處理工具 138 4.2.1 jps:虛擬機(jī)進(jìn)程狀況工具 141 4.2.2 jstat:虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具 142 4.2.3 jinfo:Java配置信息工具 143 4.2.4 jmap:Java內(nèi)存映像工具 144 4.2.5 jhat:虛擬機(jī)堆轉(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虛擬機(jī)插件及工具 175 4.5 本章小結(jié) 180 第5章 調(diào)優(yōu)案例分析與實(shí)戰(zhàn) 181 5.1 概述 181 5.2 案例分析 181 5.2.1 大內(nèi)存硬件上的程序部署策略 182 5.2.2 集群間同步導(dǎo)致的內(nèi)存溢出 184 5.2.3 堆外內(nèi)存導(dǎo)致的溢出錯(cuò)誤 185 5.2.4 外部命令導(dǎo)致系統(tǒng)緩慢 187 5.2.5 服務(wù)器虛擬機(jī)進(jìn)程崩潰 187 5.2.6 不恰當(dāng)數(shù)據(jù)結(jié)構(gòu)導(dǎo)致內(nèi)存占用過大 188 5.2.7 由Windows虛擬內(nèi)存導(dǎo)致的長時(shí)間停頓 189 5.2.8 由安全點(diǎn)導(dǎo)致長時(shí)間停頓 190 5.3 實(shí)戰(zhàn):Eclipse運(yùn)行速度調(diào)優(yōu) 192 5.3.1 調(diào)優(yōu)前的程序運(yùn)行狀態(tài) 193 5.3.2 升級JDK版本的性能變化及兼容問題 196 5.3.3 編譯時(shí)間和類加載時(shí)間的優(yōu)化 200 5.3.4 調(diào)整內(nèi)存設(shè)置控制垃圾收集頻率 203 5.3.5 選擇收集器降低延遲 206 5.4 本章小結(jié) 209 第三部分 虛擬機(jī)執(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 訪問標(biāo)志 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 運(yùn)算指令 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è)計(jì),私有實(shí)現(xiàn) 259 6.6 Class文件結(jié)構(gòu)的發(fā)展 260 6.7 本章小結(jié) 261 第7章 虛擬機(jī)類加載機(jī)制 262 7.1 概述 262 7.2 類加載的時(shí)機(jī) 263 7.3 類加載的過程 267 7.3.1 加載 267 7.3.2 驗(yàn)證 268 7.3.3 準(zhǔn)備 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章 虛擬機(jī)字節(jié)碼執(zhí)行引擎 293 8.1 概述 293 8.2 運(yùn)行時(shí)棧幀結(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 實(shí)戰(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)的案例與實(shí)戰(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)代理的實(shí)現(xiàn) 341 9.2.4 Backport工具:Java的時(shí)光機(jī)器 345 9.3 實(shí)戰(zhàn):自己動手實(shí)現(xiàn)遠(yuǎn)程執(zhí)行功能 348 9.3.1 目標(biāo) 348 9.3.2 思路 349 9.3.3 實(shí)現(xiàn) 350 9.3.4 驗(yàn)證 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 實(shí)戰(zhàn):插入式注解處理器 378 10.4.1 實(shí)戰(zhàn)目標(biāo) 379 10.4.2 代碼實(shí)現(xiàn) 379 10.4.3 運(yùn)行與測試 385 10.4.4 其他應(yīng)用案例 386 10.5 本章小結(jié) 386 第11章 后端編譯與優(yōu)化 388 11.1 概述 388 11.2 即時(shí)編譯器 389 11.2.1 解釋器與編譯器 389 11.2.2 編譯對象與觸發(fā)條件 392 11.2.3 編譯過程 397 11.2.4 實(shí)戰(zhàn):查看及分析即時(shí)編譯結(jié)果 398 11.3 提前編譯器 404 11.3.1 提前編譯的優(yōu)劣得失 405 11.3.2 實(shí)戰(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 公共子表達(dá)式消除 420 11.4.5 數(shù)組邊界檢查消除 421 11.5 實(shí)戰(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 線程的實(shí)現(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é)程的復(fù)蘇 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 線程安全的實(shí)現(xiàn)方法 471 13.3 鎖優(yōu)化 479 13.3.1 自旋鎖與自適應(yīng)自旋 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 虛擬機(jī)字節(jié)碼指令表 499 附錄D 對象查詢語言(OQL)簡介 506 附錄E JDK歷史版本軌跡 512
你還可能感興趣
我要評論
|