各大書店正在銷售,停止內卷,學點實用的
- 本書代碼最新地址 https://gitee.com/xiandafu/java-performance
- 每章的readme.md 包含了主要代碼的說明
節選
書中章節
第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 UUID 49 2.8 StringUtils類 2.9 前綴樹過濾 2.10 數字裝箱 2.11 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 Base64 4.22 辨別重量級對象 4.23 池化技術 4.24 實現hashCode 4.25 錯誤優化策略 4.25.1 final無法幫助內聯 4.25.2 subString內存泄漏 4.25.3 循環優化 4.25.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.1 精簡註釋 6.2 變量 6.2.1 變量命名 6.2.2 變量的位置 6.2.3 中間變量 6.3 方法 6.3.1 方法簽名 6.3.2 短方法 6.3.3 單一職責 6.4 分支 6.4.1 if else 6.4.2 switch case 6.5 發現對象 6.5.1 不要使用String 6.5.2 不要用數組、Map 6.6 checked異常(可控異常) 6.7 其他事項 6.7.1 避免自動格式化 6.7.2 關於Null 第7章 JIT優化 7.1 編譯Java代碼 7.2 處理語法糖 7.3 解釋執行和即時編譯 7.4 C1和C2 7.5 代碼緩存 7.6 JITWatch 7.7 內聯 7.8 虛方法調用 第8章 代碼審查 281 8.1 ConcurrentHashMap陷阱 8.2 字符串搜索 8.3 I/O輸出 8.4 字符串拼接 8.5 方法的入參和出參 8.6 RPC調用定義的返回值 8.7 Integer的使用 8.8 排序 8.9 判斷特殊的ID 8.10 優化if結構 8.11 文件複製 8.12 switch優化 8.13 Encoder 8.14 一個JMH例子 8.15 註釋 8.16 完善註釋 8.17 方法抽取 8.18 遍歷Map 8.19 日期格式化 8.20 日誌框架 8.21 持久化到數據庫 8.22 某個RPC框架 8.23 循環調用 8.24 lock的使用 8.25 字符集 8.26 處理枚舉值 8.27 任務執行 8.28 開關判斷 8.29 JDBC操作 8.30 Controller代碼 8.31 停止任務 8.32 縮短UUID 第9章 Java字節碼 9.1 Java字節碼 9.1.1 基礎知識 9.1.2 .class文件的格式 9.2 Java方法的執行 9.2.1 方法在內存中的表示 9.2.2 方法在.class文件中的表示 9.2.3 指令的分類 9.2.4 HelloWorld字節碼分析 9.2.5 字符串拼接字節碼分析 9.3 字節碼IDE插件 9.4 ASM入門 9.4.1 生成類名和構造函數 9.4.2 生成main方法 9.4.3 調用生成的代碼 9.5 ASM增強代碼 9.5.1 使用反射實現 9.5.2 使用ASM生成輔助類 9.5.3 switch語句的分類 9.5.4 獲取Bean中的property 9.5.5 switch語句的實現 9.5.6 性能對比 第10章 JVM調優 10.1 JVM內存管理 10.1.1 JVM內存區域 10.1.2 堆內存區域 10.2 垃圾回收:自動內存管理 10.2.1 垃圾自動回收 10.2.2 Serial GC 10.2.3 Parallel GC 10.2.4 CMS GC 10.2.5 G1 GC 10.3 JVM參數設置 10.3.1 從GC Log入手 10.3.2 堆大小設置建議 10.3.3 其他參數的設置 10.4 內存分析工具 10.4.1 jstat命令 10.4.2 jmap命令 10.4.3 GCeasy 10.4.4 JMC 10.4.5 MAT 10.4.6 OQL 10.5 內存故障案例分析 10.5.1 一個簡單例子 10.5.2 線程池優化導致內存泄漏 10.5.3 finalize引發的嚴重事故 10.5.4 C++動態庫導致的內存泄漏