《Java程式性能最佳化》是葛一鳴編寫的一部計算機類圖書,由清華大學出版社出版。
基本介紹
- 書名:Java程式性能最佳化
- 作者:葛一鳴
- ISBN:9787302296256
- 頁數:416
- 定價:59.00元
- 出版社:清華大學出版社
- 出版時間:2012-9-1
- 裝幀:平裝
- 副標題:讓你的Java程式更快、更穩定
內容簡介,作者簡介,目錄,
內容簡介
Java是目前套用最為廣泛的軟體開發平台,學習針對Java程式的最佳化方法有重要的現實意義。《Java程式性能最佳化:讓你的Java程式更快、更穩定》以Java性能調優為主線,系統地闡述了與Java性能最佳化相關的知識與技巧。
《Java程式性能最佳化:讓你的Java程式更快、更穩定》共6章,先後從軟體設計、軟體編碼、JVM調優以及程式故障排斥等方面介紹針對Java程式的最佳化方法。第1章介紹性能的基本概念、定律、系統調優的過程和注意事項。第2章從設計層面介紹與性能相關的設計模式、組件。第3章從代碼層面介紹如何編寫高性能的Java程式。第4章介紹了並行開發和如何通過多執行緒提高系統性能。第5章立足於JVM虛擬機層面,介紹如何通過設定合理的JVM參數提升Java程式的性能。第6章為工具篇,介紹了獲取和監控程式或系統性能指標的各種工具,包括相關的故障排查工具。
本書適合所有Java程式設計師、軟體設計師、架構師以及軟體開發愛好者,對於有一定經驗的Java工程師,本書更能幫助他突破技術瓶頸,深入Java核心開發!
作者簡介
葛一鳴,畢業於浙江工業大學,獲得了計算機軟體與理論專業碩士學位。取得了國家認證系統分析師職稱、OCP(Oracle資料庫認證專家)。現就職於UT斯達康通訊有限公司,從事Java軟體開發。熟悉Java、PHP、MySQL、Oracle等開發語言和資料庫,對Java軟體開發、性能最佳化、分散式軟體有著濃厚的興趣和深入的研究。在校期間曾經發表過多篇技術論文。
目錄
第1章 Java性能調優概述
1.1 性能概述
1.1.1 看懂程式的性能
1.1.2 性能的參考指標
1.1.3 木桶原理與性能瓶頸
1.1.4 Amdahl定律
1.2 性能調優的層次
1.2.1 設計調優
1.2.2 代碼調優
1.2.3 JVM調優
1.2.4 資料庫調優
1.2.5 作業系統調優
1.3 基本調優策略和手段
1.3.1 最佳化的一般步驟
1.3.2 系統最佳化注意事項
1.4 小結
第2章 設計最佳化
2.1 善用設計模式
2.1.1 單例模式
2.1.2 代理模式
2.1.3 享元模式
2.1.4 裝飾者模式
2.1.5 觀察者模式
2.1.6 Value Object模式
2.1.7 業務代理模式
2.2 常用最佳化組件和方法
2.2.1 緩衝(Buffer)
2.2.2 快取(Cache)
2.2.3 對象復用——“池”
2.2.4 並行替代串列
2.2.5 負載均衡
2.2.6 時間換空間
2.2.7 空間換時間
2.3 小結
第3章Java程式最佳化 66
3.1字元串最佳化處理 66
3.1.1String對象及其特點 66
3.1.2subString()方法的記憶體泄漏 68
3.1.3字元串分割和查找 71
3.1.4StringBuffer和StringBuilder 74
3.2核心數據結構 79
3.2.1List接口 79
3.2.2Map接口 86
3.2.3Set接口 97
3.2.4最佳化集合訪問代碼 99
3.2.5RandomAccess接口 101
3.3使用NIO提升性能 102
3.3.1NIO的Buffer類族和Channel 103
3.3.2Buffer的基本原理 104
3.3.3Buffer的相關操作 107
3.3.4MappedByteBuffer性能評估 114
3.3.5直接記憶體訪問 116
3.4引用類型 118
3.4.1強引用 119
3.4.2軟引用 120
3.4.3弱引用 121
3.4.4虛引用 122
3.4.5WeakHashMap類及其實現 125
3.5有助於改善性能的技巧 127
3.5.1慎用異常 127
3.5.2使用局部變數 128
3.5.3位運算代替乘除法 128
3.5.4替換switch 129
3.5.5一維數組代替二維數組 130
3.5.6提取表達式 131
3.5.7展開循環 132
3.5.8布爾運算代替位運算 133
3.5.9使用arrayCopy() 134
3.5.10使用Buffer進行I/O操作 135
3.5.11使用clone()代替new 137
3.5.12靜態方法替代實例方法 139
3.6小結 140
第4章並行程式開發及最佳化 141
4.1並行程式設計模式 141
4.1.1Future模式 141
4.1.2Master-Worker模式 148
4.1.3GuardedSuspension模式 153
4.1.4不變模式 160
4.1.5生產者-消費者模式 162
4.2JDK多任務執行框架 166
4.2.1無限制執行緒的缺陷 166
4.2.2簡單的執行緒池實現 167
4.2.3Executor框架 171
4.2.4自定義執行緒池 173
4.2.5最佳化執行緒池大小 177
4.2.6擴展ThreadPoolExecutor 178
4.3JDK並發數據結構 179
4.3.1並發List 179
4.3.2並發Set 182
4.3.3並發Map 182
4.3.4並發Queue 183
4.3.5並發Deque 186
4.4並發控制方法 187
4.4.1Java記憶體模型與volatile 187
4.4.2同步關鍵字synchronized 190
4.4.3ReentrantLock重入鎖 192
4.4.4ReadWriteLock讀寫鎖 195
4.4.5Condition對象 196
4.4.6Semaphore信號量 198
4.4.7ThreadLocal執行緒局部變數 200
4.5“鎖”的性能和最佳化 201
4.5.1執行緒的開銷 201
4.5.2避免死鎖 202
4.5.3減小鎖持有時間 206
4.5.4減小鎖粒度 207
4.5.5讀寫分離鎖來替換獨占鎖 208
4.5.6鎖分離 209
4.5.7重入鎖(ReentrantLock)和內部鎖(synchronized) 210
4.5.8鎖粗化(LockCoarsening) 211
4.5.9自旋鎖(SpinningLock) 212
4.5.10鎖消除(LockElimination) 212
4.5.11鎖偏向(BiasedLock) 214
4.6無鎖的並行計算 214
4.6.1非阻塞的同步/無鎖 214
4.6.2原子操作 215
4.6.3Amino框架介紹 217
4.6.4Amino集合 218
4.6.5Amino樹 222
4.6.6Amino圖 222
4.6.7Amino簡單調度模式 223
4.7協程 226
4.7.1協程的概念 226
4.7.2Kilim框架簡介 226
4.7.3Task及其狀態 227
4.7.4Fiber及其狀態 228
4.7.5Kilim開發環境配置 228
4.7.6Kilim之HelloWorld 230
4.7.7多任務通信 232
4.7.8Kilim實例及性能評估 233
4.8小結 236
第5章JVM調優 237
5.1Java虛擬機記憶體模型 237
5.1.1程式計數器 237
5.1.2Java虛擬機棧 238
5.1.3本地方法棧 243
5.1.4Java堆 244
5.1.5方法區 245
5.2JVM記憶體分配參數 249
5.2.1設定最大堆記憶體 249
5.2.2設定最小堆記憶體 250
5.2.3設定新生代 251
5.2.4設定持久代 252
5.2.5設定執行緒桟 253
5.2.6堆的比例分配 254
5.2.7堆分配參數總結 256
5.3垃圾收集基礎 257
5.3.1垃圾收集的作用 257
5.3.2垃圾回收算法與思想 258
5.3.3垃圾收集器的類型 262
5.3.4評價GC策略的指標 263
5.3.5新生代串列收集器 264
5.3.6老年代串列收集器 265
5.3.7並行收集器 265
5.3.8新生代並行回收(ParallelScavenge)收集器 266
5.3.9老年代並行回收收集器 267
5.3.10CMS收集器 267
5.3.11G1收集器(GarbageFirst) 270
5.3.12StoptheWorld案例 270
5.3.13收集器對系統性能的影響 272
5.3.14GC相關參數總結 273
5.4常用調優案例和方法 275
5.4.1將新對象預留在新生代 275
5.4.2大對象進入老年代 278
5.4.3設定對象進入老年代的年齡 279
5.4.4穩定與震盪的堆大小 280
5.4.5吞吐量優先案例 281
5.4.6使用大頁案例 282
5.4.7降低停頓案例 282
5.5實用JVM參數 283
5.5.1JIT編譯參數 283
5.5.2堆快照(堆Dump) 284
5.5.3錯誤處理 285
5.5.4取得GC信息 285
5.5.5類和對象跟蹤 287
5.5.6控制GC 288
5.5.7選擇類校驗器 289
5.5.8Solaris下執行緒控制 289
5.5.9使用大頁 289
5.5.10壓縮指針 289
5.6實戰JVM調優 290
5.6.1Tomcat簡介與啟動加速 290
5.6.2Web應用程式介紹 292
5.6.3JMeter介紹與使用 293
5.6.4調優前Web套用運行狀況 296
5.6.5調優過程 297
5.7總結 298
第6章Java性能調優工具 299
6.1Linux命令行工具 299
6.1.1top命令 299
6.1.2sar命令 301
6.1.3vmstat命令 302
6.1.4iostat命令 304
6.1.5pidstat工具 305
6.2Windows工具 309
6.2.1任務管理器 309
6.2.2perfmon性能監控工具 311
6.2.3ProcessExplorer 313
6.2.4pslist命令行 315
6.3JDK命令行工具 317
6.3.1jps命令 317
6.3.2jstat命令 318
6.3.3jinfo命令 322
6.3.4jmap命令 323
6.3.5jhat命令 324
6.3.6jstack命令 326
6.3.7jstatd命令 329
6.3.8hprof工具 330
6.4JConsole工具 332
6.4.1JConsole連線Java程式 332
6.4.2Java程式概況 333
6.4.3記憶體監控 333
6.4.4執行緒監控 335
6.4.5類載入情況 335
6.4.6虛擬機信息 336
6.4.7MBean管理 337
6.4.8使用外掛程式 338
6.5VisualVM多合一工具 339
6.5.1VisualVM連線應用程式 339
6.5.2監控應用程式概況 342
6.5.3ThreadDump和分析 343
6.5.4性能分析 344
6.5.5快照 346
6.5.6記憶體快照分析 347
6.5.7MBean管理 349
6.5.8TDA使用 349
6.5.9BTrace介紹 350
6.6VisualVM對OQL的支持 356
6.6.1VisualVM的OQL基本語法 356
6.6.2內置heap對象 357
6.6.3對象函式 359
6.6.4集合/統計函式 362
6.6.5程式化OQL 366
6.7MAT記憶體分析工具 368
6.7.1初識MAT 368
6.7.2淺堆和深堆 371
6.7.3支配樹(DominatorTree) 374
6.7.4垃圾回收根 375
6.7.5記憶體泄露檢測 376
6.7.6最大對象報告 378
6.7.7查找支配者 378
6.7.8執行緒分析 379
6.7.9集合使用情況分析 380
6.7.10擴展MAT 381
6.8MAT對OQL的支持 385
6.8.1Select子句 385
6.8.2From子句 387
6.8.3Where子句 389
6.8.4內置對象與方法 389
6.9JProfile簡介 393
6.9.1JProfile使用配置 393
6.9.2記憶體視圖 394
6.9.3堆快照 394
6.9.4CPU視圖 395
6.9.5執行緒視圖 397
6.9.6JVM統計信息 397
6.9.7觸發器 398
6.10小結 400