第1章 性能調優策略概述 1
1.1 為什麼需要調優 1
1.2 性能優化的參考因素 5
1.2.1 傳統計算機體係的分歧 5
1.2.2 導緻係統瓶頸的計算資源 7
1.2.3 程序性能衡量指標 8
1.2.4 性能優化目標 9
1.2.5 性能優化策略 10
1.3 性能調優分類方法 11
1.3.1 業務方麵 12
1.3.2 基礎技術方麵 12
1.3.3 組件方麵 17
1.3.4 架構方麵 19
1.3.5 層次方麵 20
1.4 本章小結 21
第2章 優化前的準備知識 22
2.1 服務器知識 23
2.1.1 內存 23
2.1.2 GPU/CPU 44
2.1.3 硬盤 49
2.1.4 網絡架構 51
2.2 新興技術 53
第3章 Java API調用優化建議 54
3.1 麵嚮對象及基礎類型 55
3.1.1 采用Clone()方式創建對象 55
3.1.2 避免對boolean判斷 55
3.1.3 多用條件操作符 56
3.1.4 靜態方法代替實例方法 56
3.1.5 有條件地使用final關鍵字 58
3.1.6 避免不需要的instanceof操作 58
3.1.7 避免子類中存在父類轉換 59
3.1.8 建議多使用局部變量 60
3.1.9 運算效率最高的方式——位運算 60
3.1.10 用一維數組代替二維數組 62
3.1.11 布爾運算代替位運算 64
3.1.12 提取錶達式優化 65
3.1.13 不要總是使用取反操作符(!) 66
3.1.14 不要重復初始化變量 66
3.1.15 變量初始化過程思考 66
3.1.16 對象的創建、訪問過程 69
3.1.17 在switch語句中使用字符串 70
3.1.18 數值字麵量的改進 73
3.1.19 優化變長參數的方法調用 74
3.1.20 針對基本數據類型的優化 75
3.1.21 空變量 76
3.2 集閤類概念 77
3.2.1 快速刪除List裏麵的數據 78
3.2.2 集閤內部避免返迴null 80
3.2.3 ArrayList、LinkedList比較 82
3.2.4 Vector、HashTable比較 85
3.2.5 HashMap使用經驗 87
3.2.6 EnumSet、EnumMap 91
3.2.7 HashSet使用經驗 92
3.2.8 LinkedHashMap、TreeMap比較 96
3.2.9 集閤處理優化新方案 99
3.2.10 優先考慮並行計算 107
3.3 字符串概念 108
3.3.1 String對象 108
3.3.2 善用String對象的SubString方法 111
3.3.3 用charat()代替startswith() 113
3.3.4 在字符串相加的時候,使用' '代替" " 114
3.3.5 字符串切割 114
3.3.6 字符串重編碼 117
3.3.7 閤並字符串 118
3.3.8 正則錶達式不是萬能的 122
3.4 引用類型概念 123
3.4.1 強引用(Strong Reference) 126
3.4.2 軟引用(Soft Reference) 131
3.4.3 弱引用(Weak Reference) 135
3.4.4 引用隊列 141
3.4.5 虛引用(Phantom Reference) 142
3.5 其他相關概念 146
3.5.1 JNI技術提升 146
3.5.2 異常捕獲機製 150
3.5.3 ExceptionUtils類 154
3.5.4 循環技巧 155
3.5.5 替換switch 157
3.5.6 優化循環 158
3.5.7 使用arrayCopy() 159
3.5.8 使用Buffer進行I/O操作 161
3.5.9 使用clone()代替new 164
3.5.10 I/O速度 166
3.5.11 Finally方法裏麵釋放或者關閉資源占用 167
3.5.12 資源管理機製 167
3.5.13 犧牲CPU時間 169
3.5.14 對象操作 172
3.5.15 正則錶達式 172
3.5.16 壓縮文件處理 174
3.6 本章小結 175
第4章 程序設計優化建議 176
4.1 算法優化概述 176
4.1.1 常用算法邏輯描述 177
4.1.2 多核算法優化原理 186
4.1.3 Java算法優化實踐 188
4.2 設計模式 196
4.2.1 設計模式的六大準則 196
4.2.2 單一對象控製 200
4.2.3 並行程序設計模式 202
4.2.4 接口適配 205
4.2.5 訪問方式隔離 219
4.3 I/O及網絡相關優化 225
4.3.1 I/O操作優化 225
4.3.2 Socket編程 231
4.3.3 NIO2.0文件係統 235
4.4 數據應用優化 236
4.4.1 關係型數據庫優化 236
4.4.2 嚮HBase插入大量數據 240
4.4.3 解決海量數據緩存 251
4.5 其他優化 256
4.5.1 Web係統性能優化建議 256
4.5.2 死鎖情況解決方案 259
4.5.3 JavaBeans組件 268
4.6 本章小結 269
第5章 Java並行程序優化建議 270
5.1 並行程序優化概述 270
5.1.1 資源限製帶來的挑戰 271
5.1.2 進程、綫程、協程 272
5.1.3 使用多綫程的原因 281
5.1.4 綫程不安全範例 282
5.1.5 重排序機製 284
5.1.6 實例變量的數據共享 286
5.1.7 生産者與消費者模式 288
5.1.8 綫程池的使用 290
5.2 鎖機製對比 296
5.2.1 鎖機製概述 296
5.2.2 Synchronized使用技巧 298
5.2.3 Volatile的使用技巧 303
5.2.4 隊列同步器 304
5.2.5 可重入鎖 307
5.2.6 讀寫鎖 308
5.2.7 偏嚮鎖和輕量級鎖 309
5.3 增加程序並行性 310
5.3.1 並發計數器 311
5.3.2 減少上下文切換次數 312
5.3.3 針對Thread類的更新 314
5.3.4 Fork/Join框架 314
5.3.5 Executor框架 318
5.4 JDK類庫使用 319
5.4.1 原子值 320
5.4.2 並行容器 324
5.4.3 非阻塞隊列 332
5.4.4 阻塞隊列 338
5.4.5 並發工具類 365
5.5 本章小結 376
第6章 JVM性能測試及監控 377
6.1 監控計算機設備層 378
6.1.1 監控CPU 380
6.1.2 監控內存 405
6.1.3 監控磁盤 417
6.1.4 監控網絡 423
6.2 監控JVM活動 428
6.2.1 監控垃圾收集目的 429
6.2.2 GC垃圾迴收報告分析 430
6.2.3 圖形化工具 431
6.2.4 GC跟蹤示例 437
6.3 本章小結 438
第7章 JVM性能調優建議 439
7.1 JVM相關概念 439
7.1.1 內存使用相關概念 440
7.1.2 字節碼相關知識 443
7.1.3 自動內存管理 448
7.2 JVM係統架構 451
7.2.1 JVM的基本架構 451
7.2.2 JVM初始化過程 453
7.2.3 JVM架構模型與執行引擎 456
7.2.4 解釋器與JIT編譯器 456
7.2.5 類加載機製 457
7.2.6 虛擬機 458
7.3 垃圾迴收機製相關 459
7.3.1 GC相關概念 459
7.3.2 垃圾迴收算法 468
7.3.3 垃圾收集器 476
7.4 實用JVM實驗 490
7.4.1 將新對象預留在年輕代 490
7.4.2 大對象進入年老代 494
7.4.3 設置對象進入年老代的年齡 495
7.4.4 穩定與震蕩的堆大小 497
7.4.5 吞吐量優先案例 498
7.4.6 使用大頁案例 499
7.4.7 降低停頓案例 499
7.4.8 設置最大堆內存 499
7.4.9 設置最小堆內存 500
7.4.10 設置年輕代 503
7.4.11 設置持久代 504
7.4.12 設置綫程棧 504
7.4.13 堆的比例分配 505
7.4.14 堆分配參數總結 508
7.4.15 垃圾迴收器相關參數總結 509
7.4.16 查詢GC命令 515
7.5 本章小結 515
第8章 其他優化建議 516
8.1 Java現有機製及未來發展 516
8.1.1 Java體係結構變化曆史 516
8.1.2 Java語言麵臨的挑戰 520
8.1.3 Java8的新特性 522
8.1.4 Java語言前景 523
8.1.5 物聯網:Java和你是一對 524
8.1.6 Java模塊化發展 525
8.1.7 OpenJDK的發展 527
8.2 係統架構優化建議 528
8.2.1 係統架構調優 528
8.2.2 Java項目優化方式分享 530
8.2.3 麵嚮服務架構 534
8.2.4 程序隔離技術 538
8.2.5 團隊並行開發準則 544
8.3 與編程無關 546
8.3.1 工程師品格 546
8.3.2 如何成為技術大牛 547
8.3.3 編程方法分享 548
8.4 本章小結
· · · · · · (
收起)