Java系統性能優化實戰
  • 推薦0
  • 收藏1
  • 瀏覽735

Java系統性能優化實戰

李家智 張世敏 (作者) 

  • 書  號:978-7-121-37566-8
  • 出版日期:2019-11-06
  • 頁  數:376
  • 開  本:16(185*235)
  • 出版狀態:上市銷售
紙質版 ¥89.00
《Java系統性能優化實戰》基于作者在實際工作中遇到的與系統相關的問題及解決之道,通過改善代碼來提高系統性能,解決因為代碼導致的系統故障。本書介紹了如何在系統中運用高性能開源工具,以及代碼優化和設計技巧來提升性能。另外,如何編寫維護性強的代碼也在本書的寫作范疇內。本書還介紹了一些底層技術,比如Java字節碼、ASM和JSR269,這些技術同樣可以運用在項目中,以輔助提升性能和方便維護代碼。

《Java系統性能優化實戰》是一本Java開發規范和系統性能優化指南,從高性能、易維護、代碼增強,以及在微服務系統中編寫Java代碼的角度來描述如何實現高性能Java系統。書中的大部分例子都是從作者所在傳統企業應用,以及高并發系統中摘錄而來的,極具參考意義。

《Java系統性能優化實戰》適合中高級程序員和架構師,以及有志從事基礎技術研發、開源工具研發的極客閱讀。本書涉及的知識面比較廣泛,也可以作為Java筆試和面試的參考書籍。
二十年開發經驗沉淀
Java工程師進階攻略
實戰Java性能優化
每個公司都要求程序員寫出性能良好、維護性強的代碼,各種高端職位的任職要求也會把優化系統作為必選要求之一。當業務系統重構時,以及各種互聯網大促前,也都期望系統的性能能變得更好。如何提高系統性能?簡單的辦法是升級系統硬件,或者購置更多的機器水平擴展系統,從而減少單機負荷以實現性能提高。這些辦法簡單粗暴,雖然效果立竿見影,但長期來看,投入大,產出小。隨著系統中越來越多“壞味道”代碼的堆積,這些辦法的效果越來越不明顯,提高單機系統的性能迫在眉睫,那么有沒有優化Java系統自身的辦法呢?市場上關于這方面的書籍或者聚焦于簡單的開發規范,或者是純理論的講解。本書嘗試把Java性能優化和實際業務系統結合起來一起講解,期望為讀者提供一種可操作的指導來優化Java系統性能。
本書的風格偏向實戰,盡管部分知識能從其他書籍或互聯網上獲取,但本書還是親自動手予以實踐。比如,證明了“采用+拼接字符串的性能在某些使用方式下更快”;早已經被人熟知的“嵌套外小內大性能更好”是一個錯誤觀點;final有助于內聯也是過時的觀點。
為了驗證本書提供的工具的性能,書中會對這些工具做性能評測,或者將官方的性能測試代碼運行并驗證,分析一定的源碼,理解其高性能的原因。對于一些早已熟悉的常識,不會膚淺介紹,而是精心設計了例子進行驗證。比如,為了驗證JIT對虛方法調用所做的優化和逆優化,設計了一個JMH測試例子。在第3章,驗證指令重排序,剛開始在我的Mac上運行10萬次都沒有發生重排序,后來擴大到運行100萬次,才會偶爾出現重排序的情況。
內容介紹
本書分為五部分,總共11章。
第一部分是第1章到第5章,第1章通過一個不超過10行的代碼優化示例介紹如何對Java系統進行優化,如何使用JMH驗證性能優化;第2章和第3章介紹JDK的核心類String、Number和并發包;第4章通過20多個優化技巧來說明Java性能優化的各種方法;第5章介紹了常用的高性能工具,如Caffeine、Jackson、HikariCP,并對其高性能的原因做了一定的源碼解析。
第二部分是第6章和第7章,不同于代碼規范,這部分強調編寫易于閱讀的代碼,會從代碼注釋、代碼分解、面向對象三方面進行講解。容易閱讀的代碼是系統性能優化的前提。
第三部分是第8章,介紹JIT優化。JIT優化對Java系統運行有深刻的影響,本章系統介紹了JIT編譯器、代碼緩存、內聯等知識。
第四部分是第9章,包含30多個具有“壞味道”的代碼片段,讀者可以嘗試優化代碼。
第五部分是第10章和第11章,第10章介紹Java字節碼和ASM,用于運行時增強Java系統;第11章介紹JSR269規范,用于編譯時增強Java系統。通過使用這些技術,可以有效提升系統的維護性和性能。
本書的每一章都可以擴展成一本書,但由于寫作難度極大,本人水平有限,本書只保留了我認為最重要的內容。
致謝
首先感謝我的妻子苗珺對我寫書的大力支持,2年前我寫作第一本書《Spring Boot 2 精髓》的時候,壓力還不是很大,而寫作本書時正好面臨了很大的工作和生活壓力。沒有她的支持,我是不可能全身心投入來完成這樣難度極大的一本書的寫作的。還有我的兒子,知道我正在做一件很重要的事情后就不再讓我陪他聊天了。2年前他的身高還不到我肩膀,現在已經跟我一樣高了,并且能用C語言完成一些奧賽信息競賽題了。
其次感謝電子工業出版社的編輯給予我絕對的信任和支持,編輯對本書的出版做了非常多的指導,我們配合默契,感謝你們付出的辛勤汗水。
最后要感謝的是開源社區和個人公眾號的一些朋友,他們對本書寫作提供了很多幫助,分別是王伯勛、楊代全、朱洛毅、曾超、李句,他們做了部分書稿的校驗工作,非常感謝他們,如果沒有他們,我是不可能及時完成本書寫作的。

目錄

第1章 Java代碼優化
1.1 可優化的代碼
1.2 性能監控
1.3 JMH
1.3.1 使用JMH
1.3.2 JMH常用設置
1.3.3 注意事項
1.3.4 單元測試
第2章 字符串和數字操作
2.1 構造字符串
2.2 字符串拼接
2.3 字符串格式化
2.4 字符串查找
2.5 替換
2.6 intern方法
2.7 StringUtils類
2.8 前綴樹過濾
2.9 數字裝箱
2.10 BigDecimal
第3章 并發編程和異步編程
3.1 不安全的代碼
3.2 Java并發編程
3.2.1 volatile
3.2.2 synchronized
3.2.3 Lock
3.2.4 Condition
3.2.5 讀寫鎖
3.2.6 Semaphore
3.2.7 柵欄
3.3 Java并發工具
3.3.1 原子變量
3.3.2 Queue
3.3.3 Future
3.3.4 ThreadLocal
3.4 Java線程池
3.5 異步編程
3.5.1 創建異步任務
3.5.2 完成后回調
3.5.3 串行執行
3.5.4 并行執行
3.5.5 接收任務處理結果
第4章 代碼性能優化
4.1 int轉String
4.2 使用Native方法
4.3 日期格式化
4.4 switch優化
4.5 優先使用局部變量
4.6 預處理
4.7 預分配
4.8 預編譯
4.9 預先編碼
4.10 謹慎使用Exception
4.11 批處理
4.12 展開循環
4.13 靜態方法調用
4.14 高速Map存取
4.15 位運算
4.16 反射
4.17 壓縮
4.18 可變數組
4.19 System.nanoTime()
4.20 ThreadLocalRandom
4.21 錯誤優化策略
4.21.1 final無法幫助內聯
4.21.2 subString內存泄漏
4.21.3 循環優化
4.21.4 循環中捕捉異常
第5章 高性能工具
5.1 高速緩存Caffeine
5.1.1 安裝Caffeine
5.1.2 Caffeine的基本使用方法
5.1.3 淘汰策略
5.1.4 statistics功能
5.1.5 Caffeine高命中率
5.1.6 卓越的性能
5.2 映射工具Selma
5.3 JSON工具Jackson
5.3.1 Jackson的三種使用方式
5.3.2 Jackson樹遍歷
5.3.3 對象綁定
5.3.4 流式操作
5.3.5 自定義JsonSerializer
5.3.6 集合的反序列化
5.3.7 性能提升和優化
5.4 HikariCP
5.4.1 安裝HikariCP
5.4.2 HikariCP性能測試
5.4.3 性能優化說明
5.5 文本處理工具Beetl
5.5.1 安裝和配置
5.5.2 腳本引擎
5.5.3 Beetl的特點
5.5.4 性能優化
5.6 MessagePack
5.7 ReflectASM
第6章 Java注釋規范
6.1 Javadoc
6.2 Tag
6.2.1 {@link}
6.2.2 @deprecated
6.2.3 {@literal}
6.2.4 {@code}
6.2.5 {@value}
6.2.6 @author
6.2.7 @param和@return
6.2.8 @throws
6.2.9 @see
6.2.10 自動復制
6.3 Package-Info
6.4 HTML的生成
6.5 Markdown-doclet
第7章 可讀性代碼
7.1 精簡注釋
7.2 變量
7.2.1 變量命名
7.2.2 變量的位置
7.2.3 中間變量
7.3 方法
7.3.1 方法簽名
7.3.2 短方法
7.3.3 單一職責
7.4 分支
7.4.1 if else
7.4.2 switch case
7.5 發現對象
7.5.1 不要使用String
7.5.2 不要用數組、Map
7.6 checked異常(可控異常)
7.7 其他事項
7.7.1 避免自動格式化
7.7.2 關于Null
第8章 JIT優化
8.1 解釋和編譯
8.2 C1和C2
8.3 代碼緩存
8.4 JITWatch
8.5 內聯
8.6 虛方法調用
第9章 代碼審查
9.1 ConcurrentHashMap陷阱
9.2 字符串搜索
9.3 I/O輸出
9.4 字符串拼接
9.5 方法的入參和出參
9.6 RPC調用定義的返回值
9.7 Integer的使用
9.8 排序
9.9 判斷特殊的ID
9.10 優化if結構
9.11 文件復制
9.12 switch優化
9.13 Encoder
9.14 一個JMH例子
9.15 注釋
9.16 完善注釋
9.17 方法抽取
9.18 遍歷Map
9.19 日期格式化
9.20 日志框架設計的問題
9.21 持久化到數據庫
9.22 某個RPC框架
9.23 循環調用
9.24 lock的使用
9.25 字符集
9.26 處理枚舉值
9.27 任務執行
9.28 開關判斷
9.29 JDBC操作
9.30 Controller代碼
9.31 停止任務
第10章 ASM運行時增強
10.1 Java字節碼
10.1.1 基礎知識
10.1.2 .class文件的格式
10.2 Java方法的執行
10.2.1 方法在內存中的表示
10.2.2 方法在.class文件中的表示
10.2.3 指令的分類
10.2.4 操作數棧的變化分析
10.3 Bytecode Outline插件
10.4 ASM入門
10.4.1 生成類名和構造函數
10.4.2 生成main方法
10.4.3 調用生成的代碼
10.5 ASM增強代碼
10.5.1 使用反射實現
10.5.2 使用ASM生成輔助類
10.5.3 switch語句的分類
10.5.4 獲取Bean中的property
10.5.5 switch語句的實現
10.5.6 性能對比
第11章 JSR269編譯時增強
11.1 Java編譯的過程
11.2 注解處理器入門
11.3 相關概念介紹
11.3.1 AbstractProcessor
11.3.2 Element與TypeMirror
11.4 注解處理器進階
11.4.1 JsonWriter注解
11.4.2 處理器與生成輔助類
11.4.3 使用生成的Mapper類
11.4.4 注解處理器的使用
11.5 調試注解處理器
11.5.1 在Eclipse中調試注解處理器
11.5.2 在IDEA中調試注解處理
附錄A 使用OQL分析虛擬機內存

讀者評論

相關圖書

Flutter開發實戰詳解

郭樹煜 (作者)

本書以實戰為導向,由淺入深地介紹了Flutter開發過程中的基礎體系、實戰技巧和源碼分析。通過本書,讀者可以快速掌握Flutter的開發技能,并通過實戰學習Fl...

 

DevOps安全:云安全服務

Julien Vehent (作者) 覃宇 (譯者)

本書主要介紹了 DevOps 實踐中最容易被忽視的一環——安全,并且對云原生服務的安全保障也做了全面的闡述。書中詳細介紹了 Web 攻擊防范、權限驗證、日志監控...

¥108.00

趣談網絡協議

劉超 (作者)

網絡協議是每個程序員入門的必修課,但是完全掌握網絡協議知識并進行實際應用卻并非易事。在本書中,作者將結合自己從業多年的“泣血”經驗,以通俗易懂、更加貼近日常生活...

¥108.00

大型互聯網企業安全架構

石祖文 (作者)

本書全面闡述了新一代安全理論與安全架構,并結合作者自身經驗層層剖析了包括Google 公司在內的各大互聯網企業所應用的各種關鍵安全技術的原理及具體實現。全書分為...

 

企業級DevOps技術與工具實戰

劉淼 張笑梅 (作者)

本書包含DevOps理論的介紹,深入淺出地解析了DevOps體系所包括的Agile/Lean/ITSM/TPS各種方法的精粹和脈絡,為DevOps愛好者提供了較...

 

千金良方——MySQL性能優化金字塔法則

李春 羅小波 董紅禹 (作者)

本書一共分為3篇:基礎篇、案例篇和工具篇?!盎A篇”從理論基礎和基本原理層面介紹了MySQL的安裝與配置、升級和體系結構,information_schema、...

 
kof雅典娜赚钱方法中文 pk10全能计划 全民网赚论坛 美女捕鱼云南 金融权重股指的是哪些 天天赚app官网下 381818白小姐中特+开奖一 网上股票交易平台 永利棋牌游戏? 北特科技股票股吧 利升国际棋牌