
掃描右側(cè)圖片或微信搜索 “ Java技術(shù)分享屋 ” ,回復 “ 驗證碼 ” ,獲取驗證密碼。
本資料僅供讀者預覽及學習交流使用,不能用于商業(yè)用途,請在下載后24小時內(nèi)刪除。如果喜歡,請購買正版!
一.資料截圖
二.資料介紹
《深入理解Java虛擬機:JVM高級特性與最佳實踐(第2版)》內(nèi)容簡介:第1版兩年內(nèi)印刷近10次,4家網(wǎng)上書店的評論近40000條,98%以上的評論全部為5星級的好評,是整個Java圖書領(lǐng)域公認的經(jīng)典著作和超級暢銷書,繁體版在臺灣也十分受歡迎。第2版在第1版的基礎(chǔ)上做了很大的改進:根據(jù)最新的JDK 1.7對全書內(nèi)容進行了全面的升級和補充;增加了大量處理各種常見JVM問題的技巧和最佳實踐;增加了若干與生產(chǎn)環(huán)境相結(jié)合的實戰(zhàn)案例;對第1版中的錯誤和不足之處的修正;等等。第2版不僅技術(shù)更新、內(nèi)容更豐富,而且實戰(zhàn)性更強。
《深入理解Java虛擬機:JVM高級特性與最佳實踐(第2版)》共分為五大部分,圍繞內(nèi)存管理、執(zhí)行子系統(tǒng)、程序編譯與優(yōu)化、高效并發(fā)等核心主題對JVM進行了全面而深入的分析,深刻揭示了JVM的工作原理。
第一部分從宏觀的角度介紹了整個Java技術(shù)體系、Java和JVM的發(fā)展歷程、模塊化,以及JDK的編譯,這對理解書中后面內(nèi)容有重要幫助。
第二部分講解了JVM的自動內(nèi)存管理,包括虛擬機內(nèi)存區(qū)域的劃分原理以及各種內(nèi)存溢出異常產(chǎn)生的原因;常見的垃圾收集算法以及垃圾收集器的特點和工作原理;常見虛擬機監(jiān)控與故障處理工具的原理和使用方法。
第三部分分析了虛擬機的執(zhí)行子系統(tǒng),包括類文件結(jié)構(gòu)、虛擬機類加載機制、虛擬機字節(jié)碼執(zhí)行引擎。
第四部分講解了程序的編譯與代碼的優(yōu)化,闡述了泛型、自動裝箱拆箱、條件編譯等語法糖的原理;講解了虛擬機的熱點探測方法、HotSpot的即時編譯器、編譯觸發(fā)條件,以及如何從虛擬機外部觀察和分析JIT編譯的數(shù)據(jù)和結(jié)果;
第五部分探討了Java實現(xiàn)高效并發(fā)的原理,包括JVM內(nèi)存模型的結(jié)構(gòu)和操作;原子性、可見性和有序性在Java內(nèi)存模型中的體現(xiàn);先行發(fā)生原則的規(guī)則和使用;線程在Java語言中的實現(xiàn)原理;虛擬機實現(xiàn)高效并發(fā)所做的一系列鎖優(yōu)化措施。
三.資料目錄
前言
第一部分走近Java
第1章走近Java2
1.1概述2
1.2Java技術(shù)體系3
1.3Java發(fā)展史5
1.4Java虛擬機發(fā)展史9
1.4.1SunClassicExactVM9
1.4.2SunHotSpotVM11
1.4.3SunMobile—EmbeddedVMMeta—CircularVM12
1.4.4BEAJRockitIBMJ9VM13
1.4.5AzulVMBEALiquidVM14
1.4.6ApacheHarmonyGoogleAndroidDalvikVM14
1.4.7MicrosoftJVM及其他15
1.5展望Java技術(shù)的未來16
1.5.1模塊化17
1.5.2混合語言17
1.5.3多核并行19
1.5.4進一步豐富語法20
1.5.564位虛擬機21
1.6實戰(zhàn):自己編譯JDK22
1.6.1獲取JDK源碼22
1.6.2系統(tǒng)需求24
1.6.3構(gòu)建編譯環(huán)境25
1.6.4進行編譯26
1.6.5在IDE工具中進行源碼調(diào)試31
1.7本章小結(jié)35
第二部分自動內(nèi)存管理機制
第2章Java內(nèi)存區(qū)域與內(nèi)存溢出異常38
2.1概述38
2.2運行時數(shù)據(jù)區(qū)域38
2.2.1程序計數(shù)器39
2.2.2Java虛擬機棧39
2.2.3本地方法棧40
2.2.4Java堆41
2.2.5方法區(qū)41
2.2.6運行時常量池42
2.2.7直接內(nèi)存43
2.3HotSpot虛擬機對象探秘43
2.3.1對象的創(chuàng)建44
2.3.2對象的內(nèi)存布局47
2.3.3對象的訪問定位48
2.4實戰(zhàn):OutOfMemoryError異常50
2.4.1Java堆溢出51
2.4.2虛擬機棧和本地方法棧溢出53
2.4.3方法區(qū)和運行時常量池溢出56
2.4.4本機直接內(nèi)存溢出59
2.5本章小結(jié)60
第3章垃圾收集器與內(nèi)存分配策略61
3.1概述61
3.2對象已死嗎62
3.2.1引用計數(shù)算法62
3.2.2可達性分析算法64
3.2.3再談引用65
3.2.4生存還是死亡66
3.2.5回收方法區(qū)68
3.3垃圾收集算法69
3.3.1標記—清除算法69
3.3.2復制算法70
3.3.3標記—整理算法71
3.3.4分代收集算法72
3.4HotSpot的算法實現(xiàn)72
3.4.1枚舉根節(jié)點72
3.4.2安全點73
3.4.3安全區(qū)域74
3.5垃圾收集器75
3.5.1Serial收集器76
3.5.2ParNew收集器77
3.5.3ParallelScavenge收集器79
3.5.4SerialOld收集器80
3.5.5ParallelOld收集器80
3.5.6CMS收集器81
3.5.7G1收集器84
3.5.8理解GC日志89
3.5.9垃圾收集器參數(shù)總結(jié)90
3.6內(nèi)存分配與回收策略91
3.6.1對象優(yōu)先在Eden分配91
3.6.2大對象直接進入老年代93
3.6.3長期存活的對象將進入老年代95
3.6.4動態(tài)對象年齡判定97
3.6.5空間分配擔保98
3.7本章小結(jié)100
第4章虛擬機性能監(jiān)控與故障處理工具101
4.1概述101
4.2JDK的命令行工具101
4.2.1jps:虛擬機進程狀況工具104
4.2.2jstat:虛擬機統(tǒng)計信息監(jiān)視工具105
4.2.3jinfo:Java配置信息工具106
4.2.4jmap:Java內(nèi)存映像工具107
4.2.5jhat:虛擬機堆轉(zhuǎn)儲快照分析工具108
4.2.6jstack:Java堆棧跟蹤工具109
4.2.7HSDIS:JIT生成代碼反匯編111
4.3JDK的可視化工具114
4.3.1JConsole:Java監(jiān)視與管理控制臺115
4.3.2VisualVM:多合一故障處理工具122
4.4本章小結(jié)131
第5章調(diào)優(yōu)案例分析與實戰(zhàn)132
5.1概述132
5.2案例分析132
5.2.1高性能硬件上的程序部署策略132
5.2.2集群間同步導致的內(nèi)存溢出135
5.2.3堆外內(nèi)存導致的溢出錯誤136
5.2.4外部命令導致系統(tǒng)緩慢137
5.2.5服務(wù)器JVM進程崩潰138
5.2.6不恰當數(shù)據(jù)結(jié)構(gòu)導致內(nèi)存占用過大139
5.2.7由Windows虛擬內(nèi)存導致的長時間停頓141
5.3實戰(zhàn):Eclipse運行速度調(diào)優(yōu)142
5.3.1調(diào)優(yōu)前的程序運行狀態(tài)142
5.3.2升級JDK1.6的性能變化及兼容問題145
5.3.3編譯時間和類加載時間的優(yōu)化150
5.3.4調(diào)整內(nèi)存設(shè)置控制垃圾收集頻率153
5.3.5選擇收集器降低延遲157
5.4本章小結(jié)160
第三部分虛擬機執(zhí)行子系統(tǒng)
第6章類文件結(jié)構(gòu)162
6.1概述162
6.2無關(guān)性的基石162
6.3Class類文件的結(jié)構(gòu)164
6.3.1魔數(shù)與Class文件的版本166
6.3.2常量池167
6.3.3訪問標志173
6.3.4類索引、父類索引與接口索引集合174
6.3.5字段表集合175
6.3.6方法表集合178
6.3.7屬性表集合180
6.4字節(jié)碼指令簡介196
6.4.1字節(jié)碼與數(shù)據(jù)類型197
6.4.2加載和存儲指令199
6.4.3運算指令200
6.4.4類型轉(zhuǎn)換指令202
6.4.5對象創(chuàng)建與訪問指令203
6.4.6操作數(shù)棧管理指令203
6.4.7控制轉(zhuǎn)移指令204
6.4.8方法調(diào)用和返回指令204
6.4.9異常處理指令205
6.4.10同步指令205
6.5公有設(shè)計和私有實現(xiàn)206
6.6Class文件結(jié)構(gòu)的發(fā)展207
6.7本章小結(jié)208
第7章虛擬機類加載機制209
7.1概述209
7.2類加載的時機210
7.3類加載的過程214
7.3.1加載214
7.3.2驗證216
7.3.3準備219
7.3.4解析220
7.3.5初始化225
7.4類加載器227
7.4.1類與類加載器228
7.4.2雙親委派模型229
7.4.3破壞雙親委派模型233
7.5本章小結(jié)235
第8章虛擬機字節(jié)碼執(zhí)行引擎236
8.1概述236
8.2運行時棧幀結(jié)構(gòu)236
8.2.1局部變量表238
8.2.2操作數(shù)棧242
8.2.3動態(tài)連接243
8.2.4方法返回地址243
8.2.5附加信息244
8.3方法調(diào)用244
8.3.1解析244
8.3.2分派246
8.3.3動態(tài)類型語言支持258
8.4基于棧的字節(jié)碼解釋執(zhí)行引擎269
8.4.1解釋執(zhí)行269
8.4.2基于棧的指令集與基于寄存器的指令集270
8.4.3基于棧的解釋器執(zhí)行過程272
8.5本章小結(jié)275
第9章類加載及執(zhí)行子系統(tǒng)的案例與實戰(zhàn)276
9.1概述276
9.2案例分析276
9.2.1Tomcat:正統(tǒng)的類加載器架構(gòu)276
9.2.2OSGi:靈活的類加載器架構(gòu)279
9.2.3字節(jié)碼生成技術(shù)與動態(tài)代理的實現(xiàn)282
9.2.4Retrotranslator:跨越JDK版本286
9.3實戰(zhàn):自己動手實現(xiàn)遠程執(zhí)行功能289
9.3.1目標290
9.3.2思路290
9.3.3實現(xiàn)291
9.3.4驗證298
9.4本章小結(jié)299
第四部分程序編譯與代碼優(yōu)化
第10章早期(編譯期)優(yōu)化302
10.1概述302
10.2Javac編譯器303
10.2.1Javac的源碼與調(diào)試303
10.2.2解析與填充符號表305
10.2.3注解處理器307
10.2.4語義分析與字節(jié)碼生成307
10.3Java語法糖的味道311
10.3.1泛型與類型擦除311
10.3.2自動裝箱、拆箱與遍歷循環(huán)315
10.3.3條件編譯317
10.4實戰(zhàn):插入式注解處理器318
10.4.1實戰(zhàn)目標318
10.4.2代碼實現(xiàn)319
10.4.3運行與測試326
10.4.4其他應用案例327
10.5本章小結(jié)328
第11章晚期(運行期)優(yōu)化329
11.1概述329
11.2HotSpot虛擬機內(nèi)的即時編譯器329
11.2.1解釋器與編譯器330
11.2.2編譯對象與觸發(fā)條件332
11.2.3編譯過程337
11.2.4查看及分析即時編譯結(jié)果339
11.3編譯優(yōu)化技術(shù)345
11.3.1優(yōu)化技術(shù)概覽346
11.3.2公共子表達式消除350
11.3.3數(shù)組邊界檢查消除351
11.3.4方法內(nèi)聯(lián)352
11.3.5逃逸分析354
11.4Java與C/C++的編譯器對比356
11.5本章小結(jié)358
第五部分高效并發(fā)
第12章Java內(nèi)存模型與線程360
12.1概述360
12.2硬件的效率與一致性361
12.3Java內(nèi)存模型362
12.3.1主內(nèi)存與工作內(nèi)存363
12.3.2內(nèi)存間交互操作364
12.3.3對于volatile型變量的特殊規(guī)則366
12.3.4對于long和double型變量的特殊規(guī)則372
12.3.5原子性、可見性與有序性373
12.3.6先行發(fā)生原則375
12.4Java與線程378
12.4.1線程的實現(xiàn)378
12.4.2Java線程調(diào)度381
12.4.3狀態(tài)轉(zhuǎn)換383
12.5本章小結(jié)384
第13章線程安全與鎖優(yōu)化385
13.1概述385
13.2線程安全385
13.2.1Java語言中的線程安全386
13.2.2線程安全的實現(xiàn)方法390
13.3鎖優(yōu)化397
13.3.1自旋鎖與自適應自旋398
13.3.2鎖消除398
13.3.3鎖粗化400
13.3.4輕量級鎖400
13.3.5偏向鎖402
13.4本章小結(jié)403
附錄
附錄A編譯Windows版的OpenJDK406
附錄B虛擬機字節(jié)碼指令表414
附錄CHotSpot虛擬機主要參數(shù)表420
附錄D對象查詢語言(OQL)簡介424
附錄EJDK歷史版本軌跡430