java性能最佳化權威指南

java性能最佳化權威指南

本書主要為Java SE和Java EE套用的性能調優提供建議。

基本介紹

  • 書名:java性能最佳化權威指南
  • 作者:Charlie Hunt / Binu John 
  • 原版名稱:Java Performance
  • 譯者柳飛 / 陸明剛 
  • ISBN:9787115342973
  • 頁數:540
  • 定價:109
  • 出版社:人民郵電出版社
  • 出版時間:2014年3月
作者簡介,譯者簡介,前言/序言,目錄,

作者簡介

Charlie Hunt,現任Salesforce公司的性能工程架構師。曾任Oracle公司首席JVM性能工程師,負責HotSpot Java虛擬機和Java SE類庫性能的改進。Charlie擁有美國伊利諾伊理工大學的計算機科學碩士學位、愛荷華州立大學的計算機科學學士學位。
Binu John,Binu擁有美國愛荷華大學生物醫學工程和計算機科學碩士學位。

譯者簡介

柳飛,畢業於中國科學技術大學和復旦大學。
陸明剛,畢業於四川大學,近十年大型軟體研發測試經驗,現任易安信中國卓越中心資深軟體工程師。

前言/序言

歡迎翻開這本Java性能調優指南!
本書主要為Java SE和Java EE套用的性能調優提供建議。具體來說包括以下幾方面:性能監控、性能分析、Java HotSpot VM(以下簡稱HotSpot VM)調優、高效的基準測試以及Java EE套用的性能調優。雖然近些年出版過幾本Java性能方面的書,但覆蓋面像本書這樣廣的並不多見。本書的主題涵蓋了諸如現代Java虛擬機的內部運作機制、垃圾收集的調優、Java EE套用的性能調優以及如何編寫卓有成效的基準測試。
通讀本書後,讀者可以深入了解Java性能調優的許多主題。讀者也可以把本書作為參考,對於感興趣的主題,直接跳到相應章節尋找答案。
對於Java性能調優的新手或者自認為初學的讀者來說,最好先讀前4章,然後可依據自己的Java性能調優問題,進一步閱讀特定的主題或章節,這樣收穫最大。對於有經驗的讀者,他們知道基本的性能調優方法,了解HotSpot VM內部的基本原理,還會使用一些工具監控作業系統和JVM的性能,因此可以直接跳到與手頭性能調優問題相關的章節,這樣的效果更好。不過,即便是掌握Java性能調優高級技巧的讀者,也仍然能從前4章中受益。
縱覽本書,沒有一招鮮式的性能調優秘笈或包羅萬象的性能百科,能讓你搖身一變成為老練的Java性能調優專家。相當數量的Java性能問題還需要專門的知識技能才能解決。性能調優在很大程度上是一門藝術。解決的Java性能問題越多,技藝才會越精湛。Java性能調優技術仍在不斷演變中,5年前最普遍的Java性能問題,現在已經不是大家最關心的問題了。現代JVM持續演進,內建了更為成熟的最佳化技術、運行時技術和垃圾收集器。與此同時,底層的硬體平台和作業系統也在演化。本書包含了至編寫時為止的最新內容,閱讀和理解這些內容可以大大增強讀者的Java性能調優能力,為調優藝術的登堂入室奠定基礎。有了堅實的基礎,性能調優的功力就會像日新月異的硬體平台、作業系統和JVM一樣突飛猛進。
下面簡單介紹一下各章的主要內容。
第1章“策略、方法和方法論”,介紹了Java性能調優實踐中的各種方法、策略和方法論,並對傳統軟體開發過程提出了改進建議,即在軟體開發中應該提前考慮軟體套用的性能和可擴展性。
第2章“作業系統性能監控”討論了作業系統的性能監控,介紹了作業系統中重要的監控統計信息,以及如何用工具監控這些統計信息。本章涉及的作業系統包括Windows、Linux及Oracle Solaris。在其他基於Unix的系統(例如Mac OS X)上監控性能統計信息時,可使用與Linux或Oracle Solaris相同或類似的命令。
第3章“JVM概覽”,高屋建瓴地介紹了HotSpot VM,描述了現代Java虛擬機架構和運轉的基本概念,並為後續的諸多章節奠定了基礎。本章沒有覆蓋所有的Java性能調優問題,也沒有提供Java性能問題所需的全部背景知識。但對於絕大多數與現代Java虛擬機內部機制密切相關的性能問題,本章提供了足夠多的背景知識。結合第7章的內容,有助於你領會如何進行HotSpot VM調優,本章也有助於理解第8、9章的主題,即如何編寫高效的基準測試。
第4章“JVM性能監控”,顧名思義,涵蓋了JVM性能監控的相關內容,介紹了重點需要監控的JVM統計數據,以及監控這些統計數據的工具。本章最後指出,這些工具擴展之後可以一併監控JVM和Java套用的統計數據。
第5章“Java套用性能分析”與第6章“Java套用性能分析技巧”講述性能分析。這兩章可看成第2章和第4章性能監控的補充。性能監控通常用來考察是否存在性能問題,或者為定位性能問題提供線索,告訴人們問題是出在作業系統、JVM、Java應用程式還是其他地方。一旦發現性能問題,並進一步通過性能監控定位之後,通常就能進行性能分析了。第5章介紹分析Java方法和Java堆(記憶體)的基本技術,還推薦了一些免費工具來說明這幾種性能分析技術背後所蘊藏的概念。本章提及的工具並不是性能分析僅有的手段,還有許多商業或者免費的工具也能提供類似的功能,其中一些工具的功能甚至超出了第5章涉及的技術範圍。第6章提供了一些技巧,用來識別一些常見的性能分析模式,這些模式指示了一些特定類型的性能問題。本章所列的經驗和技巧並不完整,卻是作者在多年Java性能調優過程中經常碰到的。附錄B中包含了第6章大部分示例的原始碼。
第7章“JVM性能調優入門”,涵蓋了HotSpot VM性能調優的諸多方面,包括啟動、記憶體占用、回響時間/延遲以及吞吐量。第7章介紹了調優的一系列步驟,包括選擇哪個JIT編譯器,選用何種垃圾收集器,怎樣調整Java堆,以及如何改動應用程式以符合干係人設定的性能目標。對於大多數讀者來說,第7章可能是本書中最有用和最值得參考的章節。
第8章“Java套用的基準測試”和第9章“多層套用的基準測試”,探討如何編寫高效的基準測試。通常來說,基準測試是通過應用程式的功能子集來衡量Java套用的性能。這兩章還將展示創建高效Java基準測試的藝術。第8章涵蓋了與編寫高效基準測試相關的較通用的主題,例如探討現代JVM的一些最佳化方法,還介紹了如何在基準測試中運用統計方法以增強基準測試的準確性。第9章則重點關注如何編寫高效的Java EE基準測試。
有些讀者對Java EE套用的性能調優特別感興趣,第10章“Web套用的性能調優”、第11章“Web Service的性能”及第12章“Java持久化和Enterprise Java Bean的性能”,分別著重介紹了Web套用、Web Service、持久化及Enterprise Java Bean的性能分析。這3章會深入分析Java EE套用中常遇到的性能問題,並為常見的Java EE性能問題提供建議或解決方案。
本書還有兩個附錄。附錄A“重要的HotSpot VM選項”列舉了本書所用到的HotSpot VM選項和其他重要的HotSpot VM性能調優選項,並描述了每個選項的含義,對何時可以使用這些選項給出了建議。附錄B“性能分析技巧示例原始碼”包含了第6章示例的原始碼,涉及減少鎖競爭、調整Java 集合(Collection)的初始容量以及增加並行性。

目錄

第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  鎖競爭實現4 
B.5  鎖競爭實現5 
B.6  調整容量變化1 
B.7  調整容量變化2 
B.8  增加並發性的單執行緒實現 
B.9  增加並發性的多執行緒實現

相關詞條

熱門詞條

聯絡我們