注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)實(shí)戰(zhàn)Java虛擬機(jī):JVM故障診斷與性能優(yōu)化(第2版)

實(shí)戰(zhàn)Java虛擬機(jī):JVM故障診斷與性能優(yōu)化(第2版)

實(shí)戰(zhàn)Java虛擬機(jī):JVM故障診斷與性能優(yōu)化(第2版)

定 價(jià):¥89.00

作 者: 葛一鳴 著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買(mǎi)這本書(shū)可以去


ISBN: 9787121367748 出版時(shí)間: 2019-07-01 包裝: 平裝
開(kāi)本: 16 頁(yè)數(shù): 456 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  不管技術(shù)如何發(fā)展,Java依然是一個(gè)充滿(mǎn)活力的生態(tài)圈,學(xué)習(xí)Java的人也越來(lái)越多,但多數(shù)人學(xué)習(xí)Java虛擬機(jī)(JVM)時(shí)都會(huì)遇到瓶頸。本書(shū)將通過(guò)200余個(gè)示例詳細(xì)介紹JVM中的各種參數(shù)配置、故障排查、性能監(jiān)控及性能優(yōu)化,幫助Java人突破瓶頸。 《實(shí)戰(zhàn)Java虛擬機(jī)———JVM故障診斷與性能優(yōu)化(第2版)》共11章,修訂后版本涵蓋Java 6~Java 10。第1~3章介紹了Java虛擬機(jī)的定義、總體架構(gòu)、常用配置參數(shù)。第4~5章介紹了垃圾回收的算法和各種垃圾回收器。第6章介紹了Java虛擬機(jī)的性能監(jiān)控和故障診斷工具。第7章詳細(xì)介紹了對(duì)Java堆的分析方法和案例。第8章介紹了Java虛擬機(jī)對(duì)多線(xiàn)程,尤其是對(duì)鎖的支持。第9~10章介紹了Java虛擬機(jī)的核心—Class文件結(jié)構(gòu),以及Java虛擬機(jī)中類(lèi)的裝載系統(tǒng)。第11章介紹了Java虛擬機(jī)的執(zhí)行系統(tǒng)和字節(jié)碼,并給出了通過(guò)ASM框架進(jìn)行字節(jié)碼注入的案例。 《實(shí)戰(zhàn)Java虛擬機(jī)———JVM故障診斷與性能優(yōu)化(第2版)》不僅適合Java程序員閱讀,還適合工作于Java虛擬機(jī)之上的研發(fā)人員、軟件設(shè)計(jì)師、架構(gòu)師閱讀。

作者簡(jiǎn)介

  ★葛一鳴51CTO特約講師,國(guó)家認(rèn)證系統(tǒng)分析師,獲得Oracle OCP認(rèn)證。長(zhǎng)期從事Java軟件開(kāi)發(fā)工作,對(duì)Java程序設(shè)計(jì)、JVM有深入的研究,對(duì)設(shè)計(jì)模式、人工智能、神經(jīng)網(wǎng)絡(luò)、數(shù)據(jù)挖掘等技術(shù)有濃厚興趣,開(kāi)設(shè)了在線(xiàn)的《深入淺出Java虛擬機(jī)——入門(mén)篇》培訓(xùn)課程。

圖書(shū)目錄

第1章 初探Java虛擬機(jī) 1
1.1 知根知底:追溯Java的發(fā)展歷程 2
1.1.1 那些依托Java虛擬機(jī)的語(yǔ)言大咖們 2
1.1.2 Java發(fā)展史上的里程碑 2
1.2 跨平臺(tái)的真相:Java虛擬機(jī)做中介 4
1.2.1 理解Java虛擬機(jī)的原理 4
1.2.2 看清Java虛擬機(jī)的種類(lèi) 5
1.3 一切看我的:Java語(yǔ)言規(guī)范 6
1.3.1 詞法的定義 6
1.3.2 語(yǔ)法的定義 7
1.3.3 數(shù)據(jù)類(lèi)型的定義 8
1.3.4 Java語(yǔ)言規(guī)范總結(jié) 9
1.4 一切聽(tīng)我的:Java虛擬機(jī)規(guī)范 9
1.5 數(shù)字編碼就是計(jì)算機(jī)世界的水和電 10
1.5.1 整數(shù)在Java虛擬機(jī)中的表示 10
1.5.2 浮點(diǎn)數(shù)在Java虛擬機(jī)中的表示 12
1.6 拋磚引玉:編譯和調(diào)試虛擬機(jī) 14
1.7 小結(jié) 18
第2章 認(rèn)識(shí)Java虛擬機(jī)的基本結(jié)構(gòu) 19
2.1 謀全局者才能成大器:看穿Java虛擬機(jī)的架構(gòu) 19
2.2 小參數(shù)能解決大問(wèn)題:學(xué)會(huì)設(shè)置Java虛擬機(jī)的參數(shù) 21
2.3 對(duì)象去哪兒:辨清Java堆 22
2.4 函數(shù)如何調(diào)用:出入Java棧 24
2.4.1 局部變量表 26
2.4.2 操作數(shù)棧 31
2.4.3 幀數(shù)據(jù)區(qū) 31
2.4.4 棧上分配 32
2.5 類(lèi)去哪兒了:識(shí)別方法區(qū) 34
2.6 小結(jié) 36
第3章 常用Java虛擬機(jī)參數(shù) 37
3.1 一切運(yùn)行都有跡可循:掌握跟蹤調(diào)試參數(shù) 37
3.1.1 跟蹤垃圾回收—讀懂虛擬機(jī)日志 38
3.1.2 類(lèi)加載/卸載的跟蹤 42
3.1.3 查看系統(tǒng)參數(shù) 45
3.2 讓性能飛起來(lái):學(xué)習(xí)堆的配置參數(shù) 45
3.2.1 最大堆和初始堆的設(shè)置 46
3.2.2 新生代的配置 49
3.2.3 堆溢出處理 53
3.3 別讓性能有缺口:了解非堆內(nèi)存的參數(shù)配置 54
3.3.1 方法區(qū)配置 55
3.3.2 棧配置 55
3.3.3 直接內(nèi)存配置 55
3.4 Client和Server二選一:虛擬機(jī)的工作模式 58
3.5 小結(jié) 59
第4章 垃圾回收的概念與算法 60
4.1 內(nèi)存管理清潔工:認(rèn)識(shí)垃圾回收 60
4.2 清潔工具大PK:討論常用的垃圾回收算法 61
4.2.1 引用計(jì)數(shù)法(Reference Counting) 62
4.2.2 標(biāo)記清除法(Mark-Sweep) 63
4.2.3 復(fù)制算法(Copying) 64
4.2.4 標(biāo)記壓縮法(Mark-Compact) 66
4.2.5 分代算法(Generational Collecting) 67
4.2.6 分區(qū)算法(Region) 68
4.3 誰(shuí)才是真正的垃圾:判斷可觸及性 69
4.3.1 對(duì)象的復(fù)活 69
4.3.2 引用和可觸及性的強(qiáng)度 71
4.3.3 軟引用—可被回收的引用 72
4.3.4 弱引用—發(fā)現(xiàn)即回收 76
4.3.5 虛引用—對(duì)象回收跟蹤 77
4.4 垃圾回收時(shí)的停頓現(xiàn)象:Stop-The-World案例實(shí)戰(zhàn) 79
4.5 小結(jié) 83
第5章 垃圾收集器和內(nèi)存分配 84
5.1 一心一意一件事:串行回收器 85
5.1.1 新生代串行回收器 85
5.1.2 老年代串行回收器 86
5.2 人多力量大:并行回收器 86
5.2.1 新生代ParNew回收器 87
5.2.2 新生代ParallelGC回收器 88
5.2.3 老年代ParallelOldGC回收器 89
5.3 一心多用都不落下:CMS回收器(JDK 8及之前的版本) 90
5.3.1 CMS主要工作步驟 90
5.3.2 CMS主要的參數(shù) 91
5.3.3 CMS的日志分析 93
5.3.4 有關(guān)Class的回收 94
5.4 未來(lái)我做主:G1回收器(JDK 9及之后版本的默認(rèn)回收器) 95
5.4.1 G1的內(nèi)存劃分和主要收集過(guò)程 95
5.4.2 G1的新生代GC 96
5.4.3 G1的并發(fā)標(biāo)記周期 97
5.4.4 混合回收 100
5.4.5 必要時(shí)的Full GC 102
5.4.6 G1的日志 102
5.4.7 G1相關(guān)的參數(shù) 106
5.5 回眸:有關(guān)對(duì)象內(nèi)存分配和回收的一些細(xì)節(jié)問(wèn)題 106
5.5.1 禁用System.gc() 107
5.5.2 System.gc()使用并發(fā)回收 107
5.5.3 并行GC前額外觸發(fā)的新生代GC 109
5.5.4 對(duì)象何時(shí)進(jìn)入老年代 109
5.5.5 在TLAB上分配對(duì)象 117
5.5.6 finalize()函數(shù)對(duì)垃圾回收的影響 120
5.6 溫故又知新:常用的GC參數(shù) 125
5.7 動(dòng)手才是真英雄:垃圾回收器對(duì)Tomcat性能影響的實(shí)驗(yàn) 127
5.7.1 配置實(shí)驗(yàn)環(huán)境 127
5.7.2 配置性能測(cè)試工具JMeter 128
5.7.3 配置Web應(yīng)用服務(wù)器Tomcat 131
5.7.4 實(shí)戰(zhàn)案例1—初試串行回收器 133
5.7.5 實(shí)戰(zhàn)案例2—擴(kuò)大堆以提升系統(tǒng)性能 133
5.7.6 實(shí)戰(zhàn)案例3—調(diào)整初始堆大小 134
5.7.7 實(shí)戰(zhàn)案例4—使用ParrellOldGC回收器 135
5.7.8 實(shí)戰(zhàn)案例5—使用較小堆提高GC壓力 135
5.7.9 實(shí)戰(zhàn)案例6—測(cè)試ParallelOldGC的表現(xiàn) 135
5.7.10 實(shí)戰(zhàn)案例7—測(cè)試ParNew回收器的表現(xiàn) 136
5.7.11 實(shí)戰(zhàn)案例8—測(cè)試JDK 1.8的表現(xiàn) 136
5.7.12 實(shí)戰(zhàn)案例9—使用高版本虛擬機(jī)提升性能 137
5.8 小結(jié) 137
第6章 性能監(jiān)控工具 138
6.1 有我更高效:Linux下的性能監(jiān)控工具 139
6.1.1 顯示系統(tǒng)整體資源使用情況—top命令 139
6.1.2 監(jiān)控內(nèi)存和CPU—vmstat命令 140
6.1.3 監(jiān)控I/O—iostat命令 142
6.1.4 多功能診斷器—pidstat工具 143
6.2 用我更高效:Windows下的性能監(jiān)控工具 148
6.2.1 任務(wù)管理器 148
6.2.2 perfmon性能監(jiān)控工具 150
6.2.3 Process Explorer進(jìn)程管理工具 153
6.2.4 pslist命令—Windows下也有命令行工具 155
6.3 外科手術(shù)刀:JDK性能監(jiān)控工具 157
6.3.1 查看Java進(jìn)程—jps命令 158
6.3.2 查看虛擬機(jī)運(yùn)行時(shí)信息—jstat命令 159
6.3.3 查看虛擬機(jī)參數(shù)—jinfo命令 162
6.3.4 導(dǎo)出堆到文件—jmap命令 163
6.3.5 JDK自帶的堆分析工具—jhat命令 165
6.3.6 查看線(xiàn)程堆棧—jstack命令 168
6.3.7 遠(yuǎn)程主機(jī)信息收集—jstatd命令 171
6.3.8 多功能命令行—jcmd命令 173
6.3.9 性能統(tǒng)計(jì)工具—hprof 175
6.3.10 擴(kuò)展jps命令 178
6.4 我是你的眼:圖形化虛擬機(jī)監(jiān)控工具JConsole 178
6.4.1 JConsole連接Java程序 179
6.4.2 Java程序概況 180
6.4.3 內(nèi)存監(jiān)控 180
6.4.4 線(xiàn)程監(jiān)控 181
6.4.5 類(lèi)加載情況 183
6.4.6 虛擬機(jī)信息 183
6.5 一目了然:可視化性能監(jiān)控工具Visual VM 184
6.5.1 Visual VM連接應(yīng)用程序 185
6.5.2 監(jiān)控應(yīng)用程序概況 186
6.5.3 Thread Dump和分析 187
6.5.4 性能分析 188
6.5.5 內(nèi)存快照分析 190
6.5.6 BTrace介紹 191
6.6 來(lái)自JRockit的禮物:虛擬機(jī)診斷工具M(jìn)ission Control 199
6.6.1 MBean服務(wù)器 199
6.6.2 飛行記錄器(Flight Recorder) 201
6.7 小結(jié) 204
第7章 分析Java堆 205
7.1 對(duì)癥才能下藥:找到內(nèi)存溢出的原因 206
7.1.1 堆溢出 206
7.1.2 直接內(nèi)存溢出 206
7.1.3 過(guò)多線(xiàn)程導(dǎo)致OOM 208
7.1.4 永久區(qū)溢出 210
7.1.5 GC效率低下引起的OOM 211
7.2 無(wú)處不在的字符串:String在虛擬機(jī)中的實(shí)現(xiàn) 211
7.2.1 String對(duì)象的特點(diǎn) 211
7.2.2 有關(guān)String的內(nèi)存泄漏 213
7.2.3 有關(guān)String常量池的位置 216
7.3 虛擬機(jī)也有內(nèi)窺鏡:使用MAT分析Java堆 218
7.3.1 初識(shí)MAT 218
7.3.2 淺堆和深堆 221
7.3.3 MAT堆分析案例解析 222
7.3.4 支配樹(shù)(Dominator Tree) 226
7.3.5 Tomcat堆溢出分析 227
7.4 篩選堆對(duì)象:MAT對(duì)OQL的支持 231
7.4.1 Select子句 231
7.4.2 From子句 233
7.4.3 Where子句 235
7.4.4 內(nèi)置對(duì)象與方法 235
7.5 更精彩的查找:Visual VM對(duì)OQL的支持 240
7.5.1 Visual VM的OQL基本語(yǔ)法 240
7.5.2 內(nèi)置heap對(duì)象 241
7.5.3 對(duì)象函數(shù) 243
7.5.4 集合/統(tǒng)計(jì)函數(shù) 247
7.5.5 程序化OQL分析Tomcat堆 253
7.6 小結(jié) 256
第8章 鎖與并發(fā) 257
8.1 安全就是鎖存在的理由:鎖的基本概念和實(shí)現(xiàn) 258
8.1.1 理解線(xiàn)程安全 258
8.1.2 對(duì)象頭和鎖 260
8.2 避免殘酷的競(jìng)爭(zhēng):鎖在Java虛擬機(jī)中的實(shí)現(xiàn)和優(yōu)化 261
8.2.1 偏向鎖 261
8.2.2 輕量級(jí)鎖 263
8.2.3 鎖膨脹 264
8.2.4 自旋鎖 265
8.2.5 鎖消除 265
8.3 應(yīng)對(duì)殘酷的競(jìng)爭(zhēng):鎖在應(yīng)用層的優(yōu)化思路 267
8.3.1 減少鎖持有時(shí)間 267
8.3.2 減小鎖粒度 268
8.3.3 鎖分離 270
8.3.4 鎖粗化 272
8.4 無(wú)招勝有招:無(wú)鎖 274
8.4.1 理解CAS 274
8.4.2 原子操作 275
8.4.3 新寵兒LongAdder 278
8.5 將隨機(jī)變?yōu)榭煽兀豪斫釰ava內(nèi)存模型 281
8.5.1 原子性 281
8.5.2 有序性 283
8.5.3 可見(jiàn)性 285
8.5.4 Happens-Before原則 287
8.6 小結(jié) 287
第9章 Class文件結(jié)構(gòu) 288
9.1 不僅跨平臺(tái),還能跨語(yǔ)言:語(yǔ)言無(wú)關(guān)性 288
9.2 虛擬機(jī)的基石:Class文件 290
9.2.1 Class文件的標(biāo)志—魔數(shù) 291
9.2.2 Class文件的版本 293
9.2.3 存放所有常數(shù)—常量池 294
9.2.4 Class的訪(fǎng)問(wèn)標(biāo)記(Access Flag) 301
9.2.5 當(dāng)前類(lèi)、父類(lèi)和接口 302
9.2.6 Class文件的字段 303
9.2.7 Class文件的方法基本結(jié)構(gòu) 305
9.2.8 方法的執(zhí)行主體—Code屬性 307
9.2.9 記錄行號(hào)—LineNumberTable屬性 308
9.2.10 保存局部變量和參數(shù)—LocalVariableTable屬性 309
9.2.11 加快字節(jié)碼校驗(yàn)—StackMapTable屬性 309
9.2.12 Code屬性總結(jié) 314
9.2.13 拋出異?!狤xceptions屬性 315
9.2.14 用實(shí)例分析Class的方法結(jié)構(gòu) 316
9.2.15 我來(lái)自哪里—SourceFile屬性 319
9.2.16 強(qiáng)大的動(dòng)態(tài)調(diào)用—BootstrapMethods屬性 320
9.2.17 內(nèi)部類(lèi)—InnerClasses屬性 321
9.2.18 將要廢棄的通知—Deprecated屬性 322
9.2.19 Class文件總結(jié) 323
9.3 操作字節(jié)碼:走進(jìn)ASM 323
9.3.1 ASM體系結(jié)構(gòu) 323
9.3.2 ASM之Hello World 325
9.4 小結(jié) 326
第10章 Class裝載系統(tǒng) 327
10.1 來(lái)去都有序:看懂Class文件的裝載流程 327
10.1.1 類(lèi)裝載的條件 328
10.1.2 加載類(lèi) 331
10.1.3 驗(yàn)證類(lèi) 333
10.1.4 準(zhǔn)備 334
10.1.5 解析類(lèi) 335
10.1.6 初始化 337
10.2 一切Class從這里開(kāi)始:掌握ClassLoader 341
10.2.1 認(rèn)識(shí)ClassLoader,看懂類(lèi)加載 342
10.2.2 ClassLoader的分類(lèi) 342
10.2.3 ClassLoader的雙親委托模式 344
10.2.4 雙親委托模式的弊端 348
10.2.5 雙親委托模式的補(bǔ)充 349
10.2.6 突破雙親模式 351
10.2.7 熱替換的實(shí)現(xiàn) 354
10.3 小結(jié) 358
第11章 字節(jié)碼執(zhí)行 359
11.1 代碼如何執(zhí)行:字節(jié)碼執(zhí)行案例 360
11.2 執(zhí)行的基礎(chǔ):Java虛擬機(jī)常用指令介紹 370
11.2.1 常量入棧指令 370
11.2.2 局部變量壓棧指令 370
11.2.3 出棧裝入局部變量表指令 372
11.2.4 通用型操作 373
11.2.5 類(lèi)型轉(zhuǎn)換指令 374
11.2.6 運(yùn)算指令 376
11.2.7 對(duì)象操作指令 378
11.2.8 比較控制指令 380
11.2.9 函數(shù)調(diào)用與返回指令 386
11.2.10 同步控制 389
11.2.11 再看Class的方法結(jié)構(gòu) 392
11.3 更上一層樓:再看ASM 393
11.3.1 為類(lèi)增加安全控制 394
11.3.2 統(tǒng)計(jì)函數(shù)執(zhí)行時(shí)間 397
11.4 誰(shuí)說(shuō)Java太刻板:Java Agent運(yùn)行時(shí)修改類(lèi) 400
11.4.1 使用-javaagent參數(shù)啟動(dòng)Java虛擬機(jī) 400
11.4.2 使用Java Agent為函數(shù)增加計(jì)時(shí)功能 403
11.4.3 動(dòng)態(tài)重轉(zhuǎn)換類(lèi) 404
11.4.4 有關(guān)Java Agent的總結(jié) 407
11.5 與時(shí)俱進(jìn):動(dòng)態(tài)方法調(diào)用 407
11.5.1 方法句柄使用實(shí)例 408
11.5.2 調(diào)用點(diǎn)使用實(shí)例 411
11.5.3 反射和方法句柄 413
11.5.4 指令invokedynamic使用實(shí)例 414
11.6 跑得再快點(diǎn):靜態(tài)編譯優(yōu)化 419
11.6.1 編譯時(shí)計(jì)算 419
11.6.2 變量字符串的連接 421
11.6.3 基于常量的條件語(yǔ)句裁剪 422
11.6.4 switch語(yǔ)句的優(yōu)化 424
11.7 提高虛擬機(jī)的執(zhí)行效率:JIT及其相關(guān)參數(shù) 425
11.7.1 開(kāi)啟JIT編譯 425
11.7.2 JIT編譯閾值 426
11.7.3 多級(jí)編譯器 427
11.7.4 OSR棧上替換 430
11.7.5 方法內(nèi)聯(lián) 432
11.7.6 設(shè)置代碼緩存大小 433
11.8 小結(jié) 436

本目錄推薦

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