作 者:(美)斯科特·奧克斯 著 黨文亮 譯
定 價:129.8
出 版 社:人民郵電出版社
出版日期:2022年04月01日
頁 數:348
裝 幀:平裝
ISBN:9787115587367
Java性能優化越來越難。曾經,通過引入即時編譯器,能實現8倍的性能飛躍。而今,你可能會有疑問:Java性能還有多大的優化空間?本書直面這一問題,證明對於工程師而言,仍有很多工作可做!1.業內老牌工程師編著,資歷深厚眼光毒辣本書作者從事Oracle雲平臺軟件的性能優化工作。在加入Oracle之前,他是Sun公司的Java布道師,並在2001年加入Java性能工程小組。作為業內深耕多年的老牌工程師,他將自己多年的JAVA編程經驗整合在書中,透徹解釋了JVM和Java平臺特性對應用程序性能的影等
●本書贊譽
前言
第1章 導論
1.1 概述
1.2 平臺和約定
1.2.1 Java平臺
1.2.2 硬件平臺
1.3 全面的性能
1.3.1 寫出更好的算法
1.3.2 寫更少的代碼
1.3.3 過早優化
1.3.4 其他:數據庫永遠是瓶頸
1.3.5 常見優化
1.4 小結
第2章 性能測試方法
2.1 測試真實的應用程序
2.1.1 微基準測試
2.1.2 宏基準測試
2.1.3 介基準測試
2.2 理解吞吐量、批處理時間和響應時間
2.2.1 測量批處理時間
2.2.2 測量吞吐量
2.2.3 測量響應時間
2.3 理解可變性
2.4 早測試、常測試
2.5 基準測試示例
2.5.1 Java微基準測試工具
2.5.2 常用代碼示例
2.6 小結
第3章 Java性能工具箱
3.1 操作繫統工具和分析
3.1.1 CPU使用率
3.1.2 CPU運行隊列
3.1.3 磁盤使用率
3.1.4 網絡使用率
3.2 Java監控工具
3.2.1 基本的VM信息
3.2.2 線程信息
3.2.3 類信息
3.2.4 實時GC分析
3.2.5 堆轉儲後期處理
3.3 性能分析工具
3.3.1 采樣分析器
3.3.2 探查分析器
3.3.3 阻塞方法和線程時間線
3.3.4 原生分析器
3.4 JFR
3.4.1 Java Mission Control
3.4.2 JFR概覽
3.4.3 開啟JFR
3.4.4 選擇JFR事件
3.5 小結
第4章 使用即時編譯器
4.1 即時編譯器:概覽
熱點編譯
4.2 分層編譯
4.3 常用的編譯器標志
4.3.1 優化代碼緩存
4.3.2 檢查編譯過程
4.3.3 分層編譯級別
4.3.4 逆優化
4.4 高級編譯器標志
4.4.1 編譯閾值
4.4.2 編譯線程
4.4.3 內聯
4.4.4 逃逸分析
4.4.5 CPU相關代碼
4.5 分層編譯的權衡
4.6 GraalVM
4.7 預編譯
4.7.1 提前編譯
4.7.2 GraalVM原生編譯
4.8 小結
第5章 垃圾回收簡介
5.1 垃圾回收概覽
5.1.1 分代垃圾回收器
5.1.2 GC算法
5.1.3 選擇GC算法
5.2 GC優化基礎
5.2.1 調整堆的大小
5.2.2 調整分代大小
5.2.3空間大小
5.2.4 控制並行
5.3 GC工具
5.3.1 在JDK 8中開啟GC日志
5.3.2 在JDK 11中開啟GC日志
5.4 小結
第6章 垃圾回收算法
6.1 理解Throughput回收器
堆大小的自適應優化和靜態優化
6.2 理解G1垃圾回收器
優化G1 GC
6.3 理解CMS回收器
針對並發模式失敗的優化
6.4 高級優化
6.4.1 晉升和Survivor空間
6.4.2 分配大對像
6.4.3 AggressiveHeap標志
6.4.4 接近掌控堆的大小
6.5 實驗性GC算法
6.5.1 並發壓縮:ZGC和Shenandoah
6.5.2 無回收:Epsilon GC
6.6 小結
第7章 堆內存很好實踐
7.1 堆分析
7.1.1 堆直方圖
7.1.2 堆轉儲
7.1.3 內存溢出錯誤
7.2 減少內存使用
7.2.1 減小對像大小
7.2.2 使用延遲初始化
7.2.3 使用不可變對像和標準化對像
7.3 對像生命周期管理
7.3.1 對像重用
7.3.2 軟引用、弱引用和其他引用
7.3.3 壓縮的普通對像指針
7.4 小結
第8章 原生內存很好實踐
8.1 內存占用
8.1.1 測量內存占用
8.1.2 最小化內存占用
8.1.3 原生內存跟蹤
8.1.4 共享庫原生內存
8.2 針對操作繫統的JVM優化
大頁
8.3 小結
第9章 線程和同步性能
9.1 線程和硬件
9.2 線程池和ThreadPoolExecutor
9.2.1 設置優選線程數
9.2.2 設置最小線程數
9.2.3 線程池任務大小
9.2.4 設置ThreadPoolExecutor的大小
9.3 ForkJoinPool
9.3.1 工作竊取
9.3.2 自動並行化
9.4 線程同步
9.4.1 同步的代價
9.4.2 避免同步
9.4.3 偽共享
9.5 JVM線程優化
9.5.1 優化線程棧大小
9.5.2 偏向鎖
9.5.3 線程優先級
9.6 監控線程和鎖
9.6.1 查看線程
9.6.2 查看阻塞線程
9.8 小結
第10章 Java服務器
10.1 Java NIO概覽
10.2 服務器容器
10.2.1 優化服務器線程池
10.2.2 異步REST服務器
10.3 異步出站調用
異步HTTP
10.4 JSON處理
10.4.1 解析和解碼概覽
10.4.2 JSON對像
10.4.3 JSON解析
10.5 小結
第11章 數據庫性能很好實踐
11.1 示例數據庫
11.2 JDBC
11.2.1 JDBC驅動
11.2.2 JDBC連接池
11.2.3 預處理語句和語句池
11.2.4 事務
11.2.5 結果集處理
11.3 JPA
11.3.1 優化JPA寫
11.3.2 優化JPA讀
11.3.3 JPA緩存
11.4 Spring Data
11.5 小結
第12章 Java SE API技巧
12.1 字符串
12.1.1 緊湊字符串
12.1.2 重復字符串和字符串保留
12.1.3 字符串連接
12.2 緩衝I/O
12.3 類加載
類數據共享
12.4 隨機數
12.5 Java原生接口
12.6 異常
12.7 日志
12.8 Java集合API
12.8.1 同步和非同步
12.8.2 設置集合大小
12.8.3 集合與內存效率
12.9 Lambda和匿名類
12.10 流和過濾器的性能
延遲遍歷
12.11 對像序列化
12.11.1 瞬時字段
12.11.2 覆蓋默認的序列化
12.11.3 壓縮序列化數據
12.11.4 跟蹤重復對像
12.12 小結
附錄 調優標志總結
本書從JVM和Java API兩個方面,深入地介紹了Java 8和Java 11等新的Java長期支持版本中影響性能的因素。本書先從Java應用程序的通用方法、基準測試的缺陷、性能監控工具等方面,分析了如何通過JVM的配置方式影響程序的性能;接著從即時編譯、垃圾回收、堆內存與原生內存很好實踐、線程與同步的性能等方面,分析了常見的優化方向及其特性。第2版專注於更加成熟的Java 8和Java 11,主要的更新內容涉及G1垃圾回收器和Java飛行記錄器,以及Java在容器化環境下的性能變化。 本書面向關注性能的Java工程師,尤其是想了解JVM和Java API的各個方面如何影響性能的開發人員。