![](/c49/99/12772493.jpg)
出版社:人民郵電出版社 ISBN:9787115552334 版次:1 商品編碼:12772493 品牌:iTuring 包裝:平裝 叢書名:圖靈程序設計叢書 開本:16開 出版時間:2020-11-01 用紙:膠版紙 頁數:318 正文語種:中文 作者:本傑明·J.,埃文斯(Benjamin,J.,Evans),詹姆斯·高夫,曾波
" 編輯推薦 適讀人群 :本書適合Java開發人員閱讀。 在當前的互聯網開發模式下,繫統訪問量日增、代碼臃腫,各種性能問題紛湧而至。性能優化作為一個常談常新的話題,受到越來越多開發者的關注。而Java是一門使用廣泛的語言,社區生態中積攢了大量寶貴的性能優化經驗。 1.作為一本性能調優方面的實用指南,本書從實驗科學的角度將JVM調優的技術原理與方法論相結合,並在此基礎上提供了可選擇的工具。 2.通過對各方面的深入研究,本書能讓使用復雜技術棧的中高級Java技術專家以量化和可驗證的方法優化Java應用程序性能。 了解Java的原則和技術如何充分利用現代硬件和操作繫統 探究一些性能測試以及困擾團隊的常見反模式 理解測量Java性能數據的陷阱以及微基準測試的缺點 深入研究JVM垃圾收集日志、監控、調優和工具 探究JIT編譯和Java語言性能技術 學習Java集合類API與性能有關的方面,從整體上理解Java並發 內容簡介 本書從實驗科學的角度探討了Java性能優化的方方面面,重點闡述了**的實用JVM性能調優策略、工具和技巧。通過本書,我們不僅可以了解Java原理和技術如何充分利用現代硬件和操作繫統、衡量Java性能的陷阱以及微基準測試的弊端有哪些,還能深入研究可能使團隊煩惱的幾種性能測試和常見反模式、JVM垃圾收集、JIT編譯和Java語言性能技術等。本書為讀者打開了深入理解Java性能的大門,並以路標助力其優化之旅。 作者簡介 本傑明·J.埃文斯(Benjamin J.Evans),初創公司jClarity聯合創始人和技術Fellow,獲得過Java Champion榮譽和JavaOne Rockstar獎,《Java程序員修煉之道》合著者。 詹姆斯·高夫(James Gough),Java開發者和技術圖書作者,任職於摩根士丹利,專注構建面向客戶的技術。 克裡斯·紐蘭(Chris Newland),JITWatch項目作者,Java Champion榮譽得主,ADVFN高級開發者和團隊負責人,擅長使用Java來處理實時的股市數據。 【譯者介紹】 曾波,互聯網架構師,擁有13年互聯網從業經驗,曾任職於微軟、什麼值得買、京東金融、鵬博士電信傳媒集團,曾參與多家公司的技術團隊從建立到成熟的過程,主持實施了重大技術決策和技術落地,在大規模復雜繫統架構和技術管理方面擁有豐富的實踐經驗。 目錄 中文版推薦序一 xv 中文版推薦序二xvi 序xvii 前言xix 第1 章 明確優化與性能1 1.1關於Java性能的誤解1 1.2Java性能概覽2 1.3作為實驗科學的性能3 1.4性能分類方法4 1.4.1吞吐量4 1.4.2延遲5 1.4.3容量5 1.4.4利用率5 1.4.5效率5 1.4.6可擴展性5 1.4.7降級6 1.4.8各種性能觀測之間的關聯6 1.5閱讀性能圖7 1.6小結11 第2 章 JVM概覽12 2.1解釋和類加載12 2.2執行字節碼13 2.3HotSpot簡介17 2.4JVM內存管理19 2.5線程和Java內存模型20 2.6認識不同的JVM20 2.7JVM的監控和工具22 2.8小結25 第3 章 硬件與操作繫統26 3.1現代硬件簡介27 3.2內存27 3.3現代處理器特性33 3.3.1翻譯後備緩衝器33 3.3.2分支預測和推測執行33 3.3.3硬件存儲器模型33 3.4操作繫統34 3.4.1調度器35 3.4.2時間問題36 3.4.3上下文切換37 3.5一個簡單的繫統模型38 3.6基本探測策略39 3.6.1利用CPU40 3.6.2垃圾收集41 3.6.3I/O42 3.6.4機械共鳴43 3.7虛擬化44 3.8JVM和操作繫統45 3.9小結46 第4 章 性能測試模式與反模式47 4.1性能測試的類型47 4.1.1延遲測試48 4.1.2吞吐量測試48 4.1.3負載測試49 4.1.4壓力測試49 4.1.5耐久性測試49 4.1.6容量規劃測試49 4.1.7退化測試50 4.2最佳實踐入門50 4.2.1自上而下的性能測試50 4.2.2創建一個測試環境51 4.2.3確定性能要求52 4.2.4Java特有的問題52 4.2.5將性能測試當作軟件開發生命周期的一部分52 4.3性能反模式53 4.3.1厭倦53 4.3.2填充簡歷54 4.3.3同儕壓力54 4.3.4缺乏理解54 4.3.5被錯誤理解的問題/不存在的問題54 4.4性能反模式目錄55 4.4.1被熱門技術分心55 4.4.2被簡單分心55 4.4.3性能調優天纔56 4.4.4按照坊間傳說調優57 4.4.5把責任歸咎給驢58 4.4.6忽略大局59 4.4.7用戶驗收測試環境就是我的計算機60 4.4.8類似生產環境的數據很難表示61 4.5認知偏差與性能測試62 4.5.1還原論思維62 4.5.2確認偏差63 4.5.3戰爭的迷霧(行動偏差)63 4.5.4風險偏差64 4.5.5埃爾斯伯格悖論64 4.6小結65 第5 章 微基準測試與統計66 5.1Java性能測量66 5.2JMH70 5.2.1不是萬不得已,不要做微基準測試(一個真實的故事)70 5.2.2關於何時使用微基準測試的啟發70 5.2.3JMH框架72 5.2.4執行基準測試73 5.3JVM性能統計77 5.3.1誤差類型78 5.3.2非正態統計82 5.4統計的解釋85 5.5小結88 第6 章 理解垃圾收集89 6.1標記和清除90 6.2HotSpot運行時92 6.2.1對像的運行時表示92 6.2.2GC根和Arena95 6.3分配與生命周期96 6.4HotSpot中的垃圾收集98 6.4.1線程本地分配98 6.4.2半空間收集99 6.5並行收集器100 6.5.1新生代並行收集101 6.5.2老年代並行收集102 6.5.3並行收集器的局限性103 6.6分配的作用104 6.7小結108 第7 章 垃圾收集高級話題109 7.1權衡與可插撥的收集器109 7.2並發垃圾收集理論111 7.2.1JVM安全點111 7.2.2三色標記112 7.3CMS114 7.3.1CMS是如何工作的115 7.3.2用於CMS的基本JVM標志117 7.4G1118 7.4.1G1堆布局和區域118 7.4.2G1算法設計119 7.4.3G1的各階段120 7.4.4用於G1的基本JVM標志121 7.5Shenandoah121 7.5.1並發壓縮123 7.5.2獲取Shenandoah123 7.6C4(Azul Zing)124 7.7IBM J9中的均衡收集器127 7.7.1J9對像頭128 7.7.2Balanced收集器的大數組129 7.7.3NUMA和Balanced收集器129 7.8遺留的HotSpot收集器130 7.8.1Serial和SerialOld130 7.8.2增量式CMS131 7.8.3已被廢棄和刪除的垃圾收集組合131 7.8.4Epsilon131 7.9小結132 第8 章 垃圾收集日志、監控、調優及工具133 8.1認識垃圾收集日志133 8.1.1開啟垃圾收集日志記錄133 8.1.2垃圾收集日志與JMX的對比134 8.1.3JMX的缺點135 8.1.4垃圾收集日志數據帶來的好處136 8.2日志解析工具136 8.2.1Censum137 8.2.2GCViewer139 8.2.3對於同一數據的不同可視化效果140 8.3基本垃圾收集調優141 8.3.1理解分配行為142 8.3.2理解暫停時間144 8.3.3收集器線程和GC根145 8.4調優Parallel GC147 8.5調優CMS148 8.6調優G1150 8.7jHiccup152 8.8小結154 第9 章 JVM上的代碼執行155 9.1字節碼解釋概覽155 9.1.1JVM字節碼158 9.1.2簡單解釋器163 9.1.3HotSpot特定細節165 9.2AOT編譯和JIT編譯166 9.2.1AOT編譯166 9.2.2JIT編譯167 9.2.3比較AOT和JIT168 9.3HotSpot JIT基礎168 9.3.1Klass字、虛函數表和指針變換168 9.3.2JIT編譯日志169 9.3.3HotSpot中的編譯器171 9.3.4HotSpot中的分層編譯171 9.4代碼緩存172 9.5簡單JIT調優173 9.6小結174 第10 章 理解即時編譯175 10.1認識JITWatch175 10.1.1基本的JITWatch視圖176 10.1.2調試JVM和hsdi180 10.2介紹JIT編譯180 10.3內聯181 10.3.1內聯的限制182 10.3.2調優內聯子繫統183 10.4循環展開184 10.5逃逸分析186 10.5.1消除堆分配187 10.5.2鎖與逃逸分析188 10.5.3逃逸分析的限制189 10.6單態分派192 10.7內部函數195 10.8棧上替換197 10.9再談安全點199 10.10核心庫方法199 10.10.1內聯方法的大小上限199 10.10.2編譯方法的大小上限203 10.11小結204 第11 章 Java語言性能技術205 11.1優化集合206 11.2針對列表的優化考慮207 11.2.1ArrayList207 11.2.2LinkedList208 11.2.3ArrayList與LinkedList的對比209 11.3針對映射的優化考慮210 11.3.1HashMap210 11.3.2TreeMap212 11.3.3缺少MultiMap213 11.4針對集的優化考慮213 11.5領域對像213 11.6避免終結化216 11.6.1血淚史:忘記清理217 11.6.2為什麼不使用終結化來解決這個問題217 11.6.3try-with-resources219 11.7方法句柄223 11.8小結226 第12 章 並發性能技術227 12.1並行介紹228 12.2理解JMM232 12.3構建並發庫236 12.3.1Unsafe237 12.3.2原子與CAS238 12.3.3鎖和自旋鎖239 12.4並發庫總結240 12.4.1java.util.concurrent中的Lock240 12.4.2讀/ 寫鎖241 12.4.3信號量242 12.4.4並發集合242 12.4.5鎖存器和屏障243 12.5執行器和任務抽像245 12.5.1認識異步執行245 12.5.2選擇一個ExecutorService246 12.5.3Fork/Join246 12.6現代Java並發248 12.6.1流和並行流248 12.6.2無鎖技術249 12.6.3基於Actor的技術250 12.7小結251 第13 章 剖析252 13.1認識剖析252 13.2采樣與安全點偏差253 13.3面向開發人員的執行剖析工具255 13.3.1VisualVM剖析器255 13.3.2JProfiler256 13.3.3YourKit261 13.3.4Java Flight Recorder和Java Mission Control262 13.3.5運維工具266 13.4現代剖析器269 13.5分配剖析器272 13.6堆轉儲分析278 13.7小結280 第14 章 高性能日志和消息繫統281 14.1日志282 14.2設計一個影響較低的日志記錄器284 14.3使用Real Logic庫實現低延遲286 14.3.1Agrona287 14.3.2Simple Binary Encoding291 14.3.3Aeron294 14.3.4Aeron的設計296 14.4小結299 第15 章 Java 9以及Java的未來方向300 15.1Java 9中小的性能增強301 15.1.1分段式代碼緩存301 15.1.2緊湊的字符串301 15.1.3新的字符串連接302 15.1.4C2編譯器的改進303 15.1.5新版G1收集器304 15.2Java 10和未來版本305 15.2.1新的發布流程305 15.2.2Java 10305 15.3Java 9及更高版本中的Unsafe307 15.4Valhalla項目和值類型308 15.5Graal和Truffle312 15.6字節碼的未來方向313 15.7並發的未來方向315 15.8總結316 作者介紹318 封面介紹318 查看全部↓
" |