基本信息
作 者:葛一鳴 等編著出 版 社:清華大學出版社
出版時間:2012-10-1
版 次:1
頁 數:400
字 數:649000
印刷時間:2012-10-1
開 本:16開
作者簡介
葛一鳴,畢業於浙江工業大學,獲得了計算機軟體與理論專業碩士學位。取得了國家認證系統分析師職稱、OCP(Oracle資料庫認證專家)。現就職於UT斯達康通訊有限公司,從事Java軟體開發。有多年的軟體開發經驗,參與開發過多個軟體項目。熟悉Java、PHP、MySQL、Oracle等開發語言和資料庫,對Java軟體開發、性能最佳化、分散式軟體有著濃厚的興趣和深入的研究。在校期間曾經發表過多篇技術論文。作者推薦
一個優秀的程式設計師,不僅要會編寫程式,更要會編寫高質量的程式感受Java開發中的大智慧,讓你的Java程式更優美
專注於Java應用程式的最佳化方法、技巧和思想
深入剖析軟體設計層面、代碼層面、JVM虛擬機層面的最佳化方法
理論結合實際,使用豐富的示例幫助讀者理解理論知識
內容簡介
Java是目前套用最為廣泛的軟體開發平台,學習針對Java程式的最佳化方法有重要的現實意義。《Java程式性能最佳化:讓你的Java程式更快、更穩定》以Java性能調優為主線,系統地闡述了與Java性能最佳化相關的知識與技巧。《Java程式性能最佳化:讓你的Java程式更快、更穩定》共6章,先後從軟體設計、軟體編碼、JVM調優以及程式故障排斥等方面介紹針對Java程式的最佳化方法。第1章介紹性能的基本概念、定律、系統調優的過程和注意事項。第2章從設計層面介紹與性能相關的設計模式、組件。第3章從代碼層面介紹如何編寫高性能的Java程式。第4章介紹了並行開發和如何通過多執行緒提高系統性能。第5章立足於JVM虛擬機層面,介紹如何通過設定合理的JVM參數提升Java程式的性能。第6章為工具篇,介紹了獲取和監控程式或系統性能指標的各種工具,包括相關的故障排查工具。
本書適合所有Java程式設計師、軟體設計師、架構師以及軟體開發愛好者,對於有一定經驗的Java工程師,本書更能幫助他突破技術瓶頸,深入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程式最佳化
3.1 字元串最佳化處理
3.1.1 String對象及其特點
3.1.2 subString()方法的記憶體泄漏
3.1.3 字元串分割和查找
3.1.4 StringBuffer和StringBuilder
3.2 核心數據結構
3.2.1 List接口
3.2.2 Map接口
3.2.3 Set接口
3.2.4 最佳化集合訪問代碼
3.2.5 RandomAccess接口
3.3 使用NIO提升性能
3.3.1 NIO的Buffer類族和Channel
3.3.2 Buffer的基本原理
3.3.3 Buffer的相關操作
3.3.4 MappedByteBuffer性能評估
3.3.5 直接記憶體訪問
3.4 引用類型
3.4.1 強引用
3.4.2 軟引用
3.4.3 弱引用
3.4.4 虛引用
3.4.5 WeakHashMap類及其實現
3.5 有助於改善性能的技巧
3.5.1 慎用異常
3.5.2 使用局部變數
3.5.3 位運算代替乘除法
3.5.4 替換switch
3.5.5 一維數組代替二維數組
3.5.6 提取表達式
3.5.7 展開循環
3.5.8 布爾運算代替位運算
3.5.9 使用arrayCopy ()
3.5.10 使用Buffer進行I/O操作
3.5.11 使用clone()代替new
3.5.12 靜態方法替代實例方法
3.6 小結
第4章 並行程式開發及最佳化
4.1 並行程式設計模式
4.1.1 Future模式
4.1.2 Master-Worker模式
4.1.3 Guarded Suspension模式
4.1.4 不變模式
4.1.5 生產者-消費者模式
4.2 JDK多任務執行框架
4.2.1 無限制執行緒的缺陷
4.2.2 簡單的執行緒池實現
4.2.3 Executor框架
4.2.4 自定義執行緒池
4.2.5 最佳化執行緒池大小
4.2.6 擴展ThreadPoolExecutor
4.3 JDK並發數據結構
4.3.1 並發List
4.3.2 並發Set
4.3.3 並發Map
4.3.4 並發Queue
4.3.5 並發Deque
4.4 並發控制方法
4.4.1 Java記憶體模型與volatile
4.4.2 同步關鍵字synchronized
4.4.3 ReentrantLock重入鎖
4.4.4 ReadWriteLock讀寫鎖
4.4.5 Condition對象
4.4.6 Semaphore信號量
4.4.7 ThreadLocal執行緒局部變數
4.5 “鎖”的性能和最佳化
4.5.1 執行緒的開銷
4.5.2 避免死鎖
4.5.3 減小鎖持有時間
4.5.4 減小鎖粒度
4.5.5 讀寫分離鎖來替換獨占鎖
4.5.6 鎖分離
4.5.7 重入鎖ReentrantLock和內部鎖synchronized
4.5.8 鎖粗化(Lock Coarsening)
4.5.9 自旋鎖(Spinning Lock)
4.5.10 鎖消除(Lock Elimination)
4.5.11 鎖偏向(Biased Lock)
4.6 無鎖的並行計算
4.6.1 非阻塞的同步/無鎖
4.6.2 原子操作
4.6.3 Amino框架介紹
4.6.4 Amino集合
4.6.5 Amino樹
4.6.6 Amino圖
4.6.7 Amino簡單調度模式
4.7 協程
4.7.1 協程的概念
4.7.2 Kilim框架簡介
4.7.3 Task及其狀態
4.7.4 Fiber及其狀態
4.7.5 Kilim開發環境配置
4.7.6 Kilim之Hello World
4.7.7 多任務通信
4.7.8 Kilim實例及性能評估
4.8 小結
第5章 JVM調優
5.1 Java虛擬機記憶體模型
5.1.1 程式計數器
5.1.2 Java虛擬機棧
5.1.3 本地方法棧
5.1.4 Java堆
5.1.5 方法區
5.2 JVM記憶體分配參數
5.2.1 設定最大堆記憶體
5.2.2 設定最小堆記憶體
5.2.3 設定新生代
5.2.4 設定持久代
5.2.5 設定執行緒桟
5.2.6 堆的比例分配
5.2.7 堆分配參數總結
5.3 垃圾收集基礎
5.3.1 垃圾收集的作用
5.3.2 垃圾回收算法與思想
5.3.3 垃圾收集器的類型
5.3.4 評價GC策略的指標
5.3.5 新生代串列收集器
5.3.6 老年代串列收集器
5.3.7 並行收集器
5.3.8 新生代並行回收(Parallel Scavenge)收集器
5.3.9 老年代並行回收收集器
5.3.10 CMS收集器
5.3.11 G1收集器(Garbage First)
5.3.12 Stop the World案例
5.3.13 收集器對系統性能的影響
5.3.14 GC相關參數總結
5.4 常用調優案例和方法
5.4.1 將新對象預留在新生代
5.4.2 大對象進入老年代
5.4.3 設定對象進入老年代的年齡
5.4.4 穩定與震盪的堆大小
5.4.5 吞吐量優先案例
5.4.6 使用大頁案例
5.4.7 降低停頓案例
5.5 實用JVM參數
5.5.1 JIT編譯參數
5.5.2 堆快照(堆Dump)
5.5.3 錯誤處理
5.5.4 取得GC信息
5.5.5 類和對象跟蹤
5.5.6 控制GC
5.5.7 選擇類校驗器
5.5.8 Solaris下執行緒控制
5.5.9 使用大頁
5.5.10 壓縮指針
5.6 實戰JVM調優
5.6.1 Tomcat簡介與啟動加速
5.6.2 Web應用程式介紹
5.6.3 JMeter介紹與使用
5.6.4 調優前Web套用運行狀況
5.6.5 調優過程
5.7 總結
第6章 Java性能調優工具
6.1 Linux命令行工具
6.1.1 top命令
6.1.2 sar命令
6.1.3 vmstat命令
6.1.4 iostat命令
6.1.5 pidstat工具
6.2 Windows工具
6.2.1 任務管理器
6.2.2 perfmon性能監控工具
6.2.3 Process Explorer
6.2.4 pslist命令行
6.3 JDK命令行工具
6.3.1 jps命令
6.3.2 jstat命令
6.3.3 jinfo命令
6.3.4 jmap命令
6.3.5 jhat命令
6.3.6 jstack命令
6.3.7 jstatd命令
6.3.8 hprof工具
6.4 JConsole工具
6.4.1 JConsole連線Java程式
6.4.2 Java程式概況
6.4.3 記憶體監控
6.4.4 執行緒監控
6.4.5 類載入情況
6.4.6 虛擬機信息
6.4.7 MBean管理
6.4.8 使用外掛程式
6.5 Visual VM多合一工具
6.5.1 Visual VM連線應用程式
6.5.2 監控應用程式概況
6.5.3 Thread Dump和分析
6.5.4 性能分析
6.5.5 快照
6.5.6 記憶體快照分析
6.5.7 MBean管理
6.5.8 TDA使用
6.5.9 BTrace介紹
6.6 Visual VM對OQL的支持
6.6.1 Visual VM的OQL基本語法
6.6.2 內置heap對象
6.6.3 對象函式
6.6.4 集合/統計函式
6.6.5 程式化OQL
6.7 MAT記憶體分析工具
6.7.1 初識MAT
6.7.2 淺堆和深堆
6.7.3 支配樹(Dominator Tree)
6.7.4 垃圾回收根
6.7.5 記憶體泄露檢測
6.7.6 最大對象報告
6.7.7 查找支配者
6.7.8 執行緒分析
6.7.9 集合使用情況分析
6.7.10 擴展MAT
6.8 MAT對OQL的支持
6.8.1 Select子句
6.8.2 From子句
6.8.3 Where子句
6.8.4 內置對象與方法
6.9 JProfile簡介
6.9.1 JProfile使用配置
6.9.2 記憶體視圖
6.9.3 堆快照
6.9.4 CPU視圖
6.9.5 執行緒視圖
6.9.6 JVM統計信息
6.9.7 觸發器
6.10 小結