編輯推薦
本書由曾任職於Oracle/Sun的性能優化專傢編寫,係統而詳細地講解瞭性能優化的各個方麵,幫助你學習Java虛擬機的基本原理、掌握一些監控Java程序性能的工具,從而快速找到程序中的性能瓶頸,並有效改善程序的運行性能。
Java性能優化的任何問題,都可以從本書中找到答案!
內容簡介
《Java性能優化專業指南》是Java應用性能調優的聖經,內容通俗易懂,介紹瞭大量的監控和測量工具,涉及各種硬件架構和操作係統。涵蓋瞭如何構建實驗、解釋結果以及如何采取行動等技巧。
作者簡介
Charlie Hunt,現任Salesforce公司的性能工程架構師。曾任Oracle公司首席JVM性能工程師,負責HotSpot Java虛擬機和Java SE類庫性能的改進。Charlie擁有美國伊利諾伊理工大學的計算機科學碩士學位、愛荷華州立大學的計算機科學學士學位。
Binu John,世界上大的社交網站創建平颱Ning.com的高級性能工程師。他目前的職責是著力改善Ning平颱的性能和擴展性,以支持每月數百萬PV的訪問量。Binu擁有美國愛荷華大學生物醫學工程和計算機科學碩士學位。
譯者簡介:
柳飛,畢業於中國科學技術大學和復旦大學。現為上海愛科生信息技術有限公司工程師,曾任OOCL ISD工程師。目前主要關注的領域為MySQL和分布式計算。十年碼農兩忙忙,不coding,自難忘。徒步及跑步業餘湊熱鬧者,中度拖延癥患者。
陸明剛,畢業於四川大學,近十年大型軟件研發測試經驗,現任易安信中國卓越中心資深軟件工程師,曾任趨勢科技中國軟件研發中心技術經理,關注JVM性能調優和大數據,喜歡挖掘技術背後的內幕,並樂此不疲。
內頁插圖
精彩書評
“本書是Java性能優化的聖經!如果你是一個細節控,那麼這本書正適閤你。”
——James Gosling,Java之父
“《Java性能優化專業指南》是Java應用性能優化的必備參考書。它由Oracle/Sun的性能優化專傢編寫,係統而詳細地講解瞭性能優化的各個方麵,從底層的操作係統及JVM的原理與監控工具,到性能測試技巧,再到上層應用框架優化。如果有Java性能優化的疑問,請先從本書開始尋找答案,無論新手老手都能從中收益。”
——莫樞,JVM開發工程師,Azul Systems
“要對Java程序做性能優化,不僅要對應用的代碼實現有足夠的瞭解,還需要對更底層的OS、JVM有較深的瞭解。這本書介紹瞭Java程序員也需要掌握的OS、JVM層麵的很多知識,更吸引人的是這本書的作者結閤自己的經驗,為大傢總結瞭一些性能優化的模式,例如CPU利用率高的時候需要怎麼進行優化,這些模式讓人受益匪淺,相信讀過後能對大傢日常工作中做性能優化提供不小的幫助。”
——林昊,阿裏巴巴技術專傢
“長期以來,一些人對Java存在一種偏見,認為Java程序存在運行性能低下的缺點。本書由淺入深地介紹瞭對於Java程序進行性能優化的各種工具和方法,幫助你學習Java虛擬機的基本原理、掌握一些監控Java程序性能的工具,從而快速找到程序中的性能瓶頸,並有效改善程序的運行性能。讀過本書,人們將能夠消除對Java程序性能的偏見,讓Java真正展現齣強大魅力。”
——李凡希,阿裏巴巴資深研發工程師
“性能優化是一門非常實戰性的技術,本書正是這樣一本非常具有實戰指導意義的作品。該書涵蓋瞭Java應用、Web應用、EJB等若乾不同場景下的性能分析、監控、優化的上佳實踐和工具,具有相當的廣度,同時該書也絕不是工具和數據的堆砌,書中對很多底層細節有著深入和細緻的介紹和分析,比如GC、JIT等JVM的基本原理,都體現瞭作者的技術深度。通讀本書能讓你更好地理解Java,並洞察和解決潛在的性能問題。”
——鄒飛,Google資深軟件工程師、技術經理
目錄
第1章 策略、方法和方法論
1.1 性能問題的現狀
1.2 性能分析的兩種方法:自頂嚮下和自底嚮上
1.2.1 自頂嚮下
1.2.2 自底嚮上
1.3 選擇正確的平颱並評估係統性能
1.3.1 選擇正確的CPU架構
1.3.2 評估係統性能
1.4 參考資料
第2章 操作係統性能監控
2.1 定義
2.2 CPU使用率
2.2.1 監控CPU使用率:Windows
2.2.2 監控CPU使用率:Windows typeperf
2.2.3 監控CPU使用率:Linux
2.2.4 監控CPU使用率:Solaris
2.2.5 命令行監控CPU使用率:Linux和Solaris
2.3 CPU調度程序運行隊列
2.3.1 監控CPU調度程序運行隊列:Windows
2.3.2 監控CPU調度程序運行隊列:Solaris
2.3.3 監控CPU調度程序運行隊列:Linux
2.4 內存使用率
2.4.1 監控內存利用率:Windows
2.4.2 監控內存使用率:Solaris
2.4.3 監控內存使用率:Linux
2.4.4 監控鎖競爭:Solaris
2.4.5 監控鎖競爭:Linux
2.4.6 監控鎖競爭:Windows
2.4.7 隔離競爭鎖
2.4.8 監控搶占式上下文切換
2.4.9 監控綫程遷移
2.5 網絡I/O使用率
2.5.1 監控網絡I/O使用率:Solaris
2.5.2 監控網絡I/O使用率:Linux
2.5.3 監控網絡I/O使用率:Windows
2.5.4 應用性能改進的考慮
2.6 磁盤I/O使用率
2.7 其他命令行工具
2.8 監控CPU使用率:SPARC T係列係統
2.9 參考資料
第3章 JVM概覽
3.1 HotSpot VM的基本架構
3.2 HotSpot VM運行時
3.2.1 命令行選項
3.2.2 VM生命周期
3.2.3 VM類加載
3.2.4 字節碼驗證
3.2.5 類數據共享
3.2.6 解釋器
3.2.7 異常處理
3.2.8 同步
3.2.9 綫程管理
3.2.10 C++堆管理
3.2.11 Java本地接口
3.2.12 VM緻命錯誤處理
3.3 HotSpot VM垃圾收集器
3.3.1 分代垃圾收集
3.3.2 新生代
3.3.3 快速內存分配
3.3.4 垃圾收集器
3.3.5 Serial收集器
3.3.6 Parallel收集器:吞吐量為先!
3.3.7 Mostly-Concurrent收集器:低延遲為先!
3.3.8 Garbage-First收集器:CMS替代者
3.3.9 垃圾收集器比較
3.3.10 應用程序對垃圾收集器的影響
3.3.11 簡單迴顧收集器曆史
3.4 HotSpot VM JIT編譯器
3.4.1 類型繼承關係分析
3.4.2 編譯策略
3.4.3 逆優化
3.4.4 Client JIT編譯器概覽
3.4.5 Server JIT編譯器概覽
3.4.6 靜態單賦值--程序依賴圖
3.4.7 未來增強展望
3.5 HotSpot VM自適應調優
3.5.1 Java 1.4.2的默認值
3.5.2 Java 5自動優化的默認值
3.5.3 Java 6 Update 18更新後的默認優化值
3.5.4 自適應Java堆調整
3.5.5 超越自動優化
3.6 參考資料
第4章 JVM性能監控
4.1 定義
4.2 垃圾收集
4.2.1 重要的垃圾收集數據
4.2.2 垃圾收集報告
4.2.3 垃圾收集數據的離綫分析
4.2.4 圖形化工具
4.3 JIT編譯器
4.4 類加載
4.5 Java應用監控
4.6 參考資料
第5章 Java應用性能分析
5.1 術語
5.1.1 通用性能分析術語
5.1.2 Oracle Solaris Studio Performance Analyzer術語
5.1.3 NetBeans Profiler術語
5.2 Oracle Solaris Studio Performance Analyzer
5.2.1 支持平颱
5.2.2 下載/安裝Oracle Solaris Studio Performance Analyzer
5.2.3 使用Oracle Solaris Studio Performance Analyzer 抓取性能數據
5.2.4 查看性能數據
5.2.5 數據錶示
5.2.6 過濾性能數據
5.2.7 命令行工具er_print
5.3 NetBeans Profiler
5.3.1 支持平颱
5.3.2 下載安裝NetBeans Profiler
5.3.3 開始方法分析會話
5.3.4 Controls子麵闆
5.3.5 Status子麵闆
5.3.6 Profiling Results子麵闆
5.3.7 Saved Snapshots子麵闆
5.3.8 View子麵闆
5.3.9 Basic Telemetry子麵闆
5.3.10 查看動態結果
5.3.11 對結果進行快照
5.3.12 啓動內存分析會話
5.3.13 查看實時結果
5.3.14 對結果進行快照
5.3.15 定位內存泄漏
5.3.16 分析堆轉儲
5.4 參考資料
第6章 Java應用性能分析技巧
6.1 性能優化機會
6.2 係統或內核態CPU使用
6.3 鎖競爭
6.4 Volatile的使用
6.5 調整數據結構的大小
6.5.1 StringBuilder或StringBuffer大小的調整
6.5.2 Java Collection類大小調整
6.6 增加並行性
6.7 過高的CPU使用率
6.8 其他有用的分析提示
6.9 參考資料
第7章 JVM性能調優入門
7.1 方法
7.1.1 假設條件
7.1.2 測試基礎設施需求
7.2 應用程序的係統需求
7.2.1 可用性
7.2.2 可管理性
7.2.3 吞吐量
7.2.4 延遲及響應性
7.2.5 內存占用
7.2.6 啓動時間
7.3 對係統需求分級
7.4 選擇JVM部署模式
7.4.1 單JVM部署模式
7.4.2 多JVM部署模式
7.4.3 通用建議
7.5 選擇JVM運行模式
7.5.1 Client模式或Server模式
7.5.2 32位/64位 JVM
7.5.3 垃圾收集器
7.6 垃圾收集調優基礎
7.6.1 性能屬性
7.6.2 原則
7.6.3 命令行選項及GC日誌
7.7 確定內存占用
7.7.1 約束
7.7.2 HotSpot VM堆的布局
7.7.3 堆大小調優著眼點
7.7.4 計算活躍數據大小
7.7.5 初始堆空間大小配置
7.7.6 其他考量因素
7.8 調優延遲/響應性
7.8.1 輸入
7.8.2 優化新生代的大小
7.8.3 優化老年代的大小
7.8.4 為CMS調優延遲
7.8.5 Survivor空間介紹
7.8.6 解析晉升閾值
7.8.7 監控晉升閾值
7.8.8 調整Survivor空間的容量
7.8.9 顯式的垃圾收集
7.8.10 並發永久代垃圾收集
7.8.11 調優CMS停頓時間
7.8.12 下一步
7.9 應用程序吞吐量調優
7.9.1 CMS吞吐量調優
7.9.2 Throughput收集器調優
7.9.3 Survivor空間調優
7.9.4 調優並行垃圾收集綫程
7.9.5 在NUMA係統上部署
7.9.6 下一步
7.10 極端示例
7.11 其他性能命令行選項
7.11.1 實驗性(最近最大)優化
7.11.2 逃逸分析
7.11.3 偏嚮鎖
7.11.4 大頁麵支持
7.12 參考資料
第8章 Java應用的基準測試
8.1 基準測試所麵臨的挑戰
8.1.1 基準測試的預熱階段
8.1.2 垃圾收集
8.1.3 使用Java Time接口
8.1.4 剔除無效代碼
8.1.5 內聯
8.1.6 逆優化
8.1.7 創建微基準測試的注意事項
8.2 實驗設計
8.3 使用統計方法
8.3.1 計算均值
8.3.2 計算標準差
8.3.3 計算置信區間
8.3.4 使用假設測試
8.3.5 使用統計方法的注意事項
8.4 參考文獻
8.5 參考資料
第9章 多層應用的基準測試
9.1 基準測試難題
9.2 企業級應用基準測試的考量
9.2.1 定義被測係統
9.2.2 製定微基準測試
9.2.3 定義用戶交互模型
9.2.4 定義性能指標
9.2.5 擴展基準測試
9.2.6 用利特爾法則驗證
9.2.7 思考時間
9.2.8 擴展性分析
9.2.9 運行基準測試
9.3 應用服務器監控
9.3.1 GlassFish監控
9.3.2 監控子係統
9.3.3 Solaris
9.3.4 Linux
9.3.5 Windows
9.3.6 外部係統的性能
9.3.7 磁盤I/O
9.3.8 監控和調優資源池
9.4 企業級應用性能分析
9.5 參考資料
第10章 Web應用的性能調優
10.1 Web應用的基準測試
10.2 Web容器的組件
10.2.1 HTTP連接器
10.2.2 Servlet引擎
10.3 Web容器的監控和性能調優
10.3.1 容器的開發和生産模式
10.3.2 安全管理器
10.3.3 JVM調優
10.3.4 HTTP服務和Web容器
10.3.5 HTTP監聽器
10.4 最佳實踐
10.4.1 Servlet和JSP最佳實踐
10.4.2 內容緩存
10.4.3 會話持久化
10.4.4 HTTP服務器文件緩存
10.5 參考資料
第11章 Web Service的性能
11.1 XML的性能
11.1.1 XML處理的生命周期
11.1.2 解析/解編組
11.1.3 訪問
11.1.4 修改
11.1.5 序列化/編組
11.2 驗證
11.3 解析外部實體
11.4 XML文檔的局部處理
11.5 選擇閤適的API
11.6 JAX-WS參考實現棧
11.7 Web Service基準測試
11.8 影響Web Service性能的因素
11.8.1 消息大小的影響
11.8.2 不同Schema類型的性能特徵
11.8.3 終端服務器的實現
11.8.4 處理程序的性能
11.9 最佳性能實踐
11.9.1 二進製負載的處理
11.9.2 處理XML文檔
11.9.3 使用MTOM發送XML文檔
11.9.4 使用Provider接口
11.9.5 快速信息集
11.9.6 HTTP壓縮
11.9.7 Web Service客戶端的性能
11.10 參考資料
第12章 Java持久化及Enterprise Java Bean的性能
12.1 EJB編程模型
12.2 Java持久化API及其參考實現
12.3 監控及調優EJB容器
12.3.1 綫程池
12.3.2 Bean池和緩存
12.3.3 EclipseLink會話緩存
12.4 事務隔離級
12.5 Enterprise Java Bean的最佳實踐
12.5.1 簡要說明使用的EJB基準測試
12.5.2 EJB 2.1
12.5.3 EJB 3.0
12.6 Java持久化最佳實踐
12.6.1 JPA查詢語言中的查詢
12.6.2 查詢結果緩存
12.6.3 FetchType
12.6.4 連接池
12.6.5 批量更新
12.6.6 選擇正確的數據庫鎖策略
12.6.7 不帶事務的讀取
12.6.8 繼承
12.7 參考資料
附錄A 重要的HotSpot VM選項
附錄B 性能分析技巧示例源代碼
B.1 鎖競爭實現1
B.2 鎖競爭實現2
B.3 鎖競爭實現3
B.4
Java性能優化權威指南 [Java performance] 下載 mobi epub pdf txt 電子書 格式