新到貨2本75折
新一代垃圾回收器ZGC設計與實現

新一代垃圾回收器ZGC設計與實現

  • 定價:534
  • 優惠價:87465
  • 運送方式:
  • 臺灣與離島
  • 海外
  • 可配送點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
  • 可取貨點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
載入中...
  • 分享
 

內容簡介

Java11版本包含一個全新的垃圾收集器ZGC,它由Oracle開發,承諾在數TB的堆上具有非常低的暫停時間。ZGC是2017年Oracle公司貢獻給OpenJDK社區的,正式成為OpenJDK的開源項目。ZGC所針對的是這些在未來普遍存在的大容量記憶體:TB級別的堆容量,具有很低的停頓時間(小於10毫秒),對整體應用性能的影響也很小(對輸送量的影響低於15%)。ZGC所採用的機制也可以在未來進行擴展,以支持一些令人興奮的特性,如多層堆(用於熱物件的DRAM和用於低頻訪問對象的NVMe快閃記憶體)或壓縮堆。

本書詳細介紹ZGC涉及的基本概念和運行原理,以及調優方法。主要內容共9章,主要內容有:垃圾回收器概述、ZGC記憶體管理、ZGC執行緒、ZGC垃圾回收演算法的設計、ZGC日志解讀、ZGC參數和基準測試、ZGC的編譯調試、ZGC特性總結和展望、ZGC的編譯調試、Shenandoah簡介等。
 

作者介紹

彭成寒,高級Java工程師,目前主要從事風控系統設計、演算法建模、大資料處理等工作,有超過10年的Java和C++開發經驗。
 

目錄

前言
第1章 垃圾回收器概述 1
1.1 垃圾回收演算法 2
1.2 JVM垃圾回收器 2
1.2.1 串列回收 3
1.2.2 並行回收 4
1.2.3 CMS 4
1.2.4 G1 5
1.2.5 ZGC 15
1.2.6 Shenandoah 19

第2章 ZGC記憶體管理 21
2.1 作業系統位址管理 21
2.2 ZGC記憶體管理 22
2.2.1 多視圖映射 25
2.2.2 ZGC多視圖映射 27
2.2.3 頁面設計 30
2.2.4 對NUMA的支持 31
2.2.5 ZGC中的實體記憶體管理 32
2.2.6 ZGC中的虛擬記憶體管理 34
2.2.7 ZGC記憶體預分配 35
2.3 ZGC物件分配管理 36
2.3.1 對象空間分配 39
2.3.2 頁面分配 42

第3章 ZGC執行緒 48
3.1 執行緒的基本概念 48
3.2 控制執行緒 49
3.2.1 時鐘觸發器 51
3.2.2 消息觸發 53
3.2.3 VMThread 56
3.3 工作執行緒 59
3.4 垃圾回收觸發的時機 62

第4章 ZGC垃圾回收演算法的設計 67
4.1 併發垃圾回收演算法 67
4.1.1 併發垃圾回收演算法概述 67
4.1.2 ZGC併發演算法的設計 68
4.2 併發處理 70
4.2.1 併發處理概述 71
4.2.2 ZGC併發處理演算法 73
4.2.3 ZGC併發處理演算法演示 75

第5章 ZGC垃圾回收演算法的實現 78
5.1 垃圾回收的實現 78
5.1.1 初始標記 78
5.1.2 併發標記 88
5.1.3 再標記和非強根並行標記 94
5.1.4 非強引用併發標記和引用併發處理 98
5.1.5 重置轉移集 105
5.1.6 回收無效的頁面 106
5.1.7 選擇待回收的頁面 106
5.1.8 初始化待轉移集合的轉移表 108
5.1.9 初始轉移 108
5.1.10 併發轉移 110
5.1.11 垃圾回收演算法再討論 111
5.2 垃圾回收演算法演示 112

第6章 ZGC日誌解讀 120
6.1 Xlog簡介 120
6.2 測試用例設計 123
6.3 ZGC初始化信息 125
6.4 垃圾回收觸發信息 127
6.5 垃圾回收過程中每一步的資訊 130
6.6 統計資訊 137
6.6.1 垃圾回收器信息 137
6.6.2 競爭資訊 137
6.6.3 同步等待資訊 139
6.6.4 記憶體資訊 140
6.6.5 垃圾回收步驟資訊 142
6.6.6 子階段資訊 144
6.6.7 執行緒信息 146

第7章 ZGC參數和基準測試 147
7.1 參數簡介 147
7.1.1 ZGC新引入參數 147
7.1.2 GC通用參數 149
7.2 測試評估 150
7.2.1 測試準備 151
7.2.2 測試與測試報告 154

第8章 ZGC的發展與展望 160
8.1 類回收 161
8.2 單代回收 164
8.3 新功能和多平臺 165

第9章 JVM編譯調試 166
9.1 下載原始程式碼 166
9.2 代碼概覽 167
9.3 編譯JVM 168
9.4 調試ZGC 169
9.4.1 啟動GDB 170
9.4.2 對象分配 170
9.4.3 觸發垃圾回收 172
9.4.4 初始標記 172
9.4.5 併發標記 173
9.4.6 初始轉移 174
9.4.7 併發轉移 176
9.4.8 重定位 176
9.5 使用HSDB學習JVM中物件佈局 178
9.5.1 C++對象佈局原理 178
9.5.2 Java對象佈局原理 180
9.5.3 用HSDB分析Java物件佈局 180

第10章 Shenandoah簡介 192
10.1 概述 192
10.2 Shenandoah垃圾回收策略 193
10.3 Shenandoah垃圾回收演算法 194
10.3.1 正常回收演算法 195
10.3.2 遍歷回收演算法 197

附錄A Cassandra簡介 200
附錄B YCSB簡介 202
 

JDK 11於2018年9月25日正式發佈,這個版本引入了許多新的特性,其中最為引人注目的就是實現了一款新的垃圾回收器ZGC。Java開發人員日常工作中最關注、接觸最多的就是JVM中的垃圾回收器,所以該垃圾回收器一經發佈,立即吸引了大量開發人員的目光。
 
在JDK 11中,ZGC被明確標記為實驗性質(意味著還不成熟),這樣一款尚不成熟的垃圾回收器為什麼能合入Open JDK的官方項目中?它對以前的垃圾回收器的 改進體現在哪裡?它的創新點是什麼?它的不足有哪些?本書嘗試從ZGC的代碼出發,分析ZGC的設計和實現,希望能找到上述問題的答案。

ZGC是一款開源的垃圾回收器,本書從原理和代碼角度對ZGC進行剖析,與大家一起學習ZGC,並希望通過本書的介紹讓更多的人認識和使用它,也希望大家在學習的過程中都能理解、掌握、精通ZGC,並能在社區中貢獻自己的力量。

本書共分為10章:
第1章介紹JVM中實現的垃圾回收器,其中著重介紹了G1,最後介紹了ZGC對G1的改進以及當下ZGC尚需完善之處。

第2章首先介紹記憶體位址多視圖映射,然後介紹ZGC中的實體記憶體和虛擬記憶體,以及它們的管理,最後介紹ZGC如何分配物件。

第3章主要介紹ZGC中涉及的四大控制執行緒:ZDirector負責垃圾回收的觸發,ZDriver負責垃圾回收的執行,ZStat負責收集統計資訊,VMThread負責控制進行STW操作。

第4章介紹ZGC如何利用位址多視圖映射設計併發演算法進行併發標記、併發轉移和併發重定位。

第5章介紹ZGC垃圾回收過程的10個步驟以及每一步所做的工作,同時給出了演算法示例圖演示整個垃圾回收的過程。

第6章分析一個完整的ZGC運行日誌,並針對每一行日誌進行解釋,為讀者瞭解ZGC的運行情況提供説明。

第7章首先介紹ZGC中最常用的參數,包括ZGC新引入的參數、ZGC重用的通用GC參數,然後介紹分別使用G1和ZGC作為垃圾回收器運行Cassandra和YCSB,從停頓時間和吞吐率兩個方面比較ZGC和G1的運行效果。

第8章主要介紹ZGC目前存在的不足以及未來的發展方向。

第9章介紹兩種調試方法:根據原始程式碼編譯後使用GDB調試JVM,著重介紹ZGC垃圾回收過程的調試;根據HotSpot Debugger工具對運行的Java程式進行分析。

第10章對Shenandoah進行簡要介紹。Shenandoah在JDK 12中作為實驗項目加入OpenJDK,它和ZGC的定位非常類似,但實現方法並不相同。該章簡單地介紹Shenandoah和G1、ZGC之間的區 別,Shenandoah垃圾回收觸發的策略以及Shenandoah實現的幾種垃圾回收演算法。

本書主要基於JDK 11原始程式碼進行分析,所用的版本是jdk11u1,讀者可以自行到OpenJDK的官網下載,也可以從筆者在GitHub(https://github.com/chenghanpeng/jdk11u)的備份中下載。

在本書中,為了能夠讓讀者更加清晰、直觀地瞭解一些基本概念,筆者設計了一些樣常式式,這些樣例代碼可以從倉庫 (https://github.com/chenghanpeng/jdk11u/tree/master/example)中下載。另外,本書介紹了 ZGC在JDK 12 中的新功能——類回收,為了便於讀者學習研究,筆者也維護了一份JDK 12的原始程式碼(https://github.com/chenghanpeng/jdk12),供感興趣的讀者下載。

最後再強調一點,ZGC處於持續反覆運算開發中,變化也會很快。為了能夠深入探索ZGC,希望讀者在閱讀本書時要始終抱著質疑的態度,不斷地問自己:書中的介紹和解釋是否正確?ZGC的實現是否有改進的空間?如果有該如何改進?只有不斷地提出問題、解決問題,才能深入理解和運用ZGC。

由於筆者水準有限,時間倉促,書中難免存在錯漏之處,懇請讀者批評指正。你可以通過https://github.com/chenghanpeng/jdk11u/issues提交問題。期待能夠得到讀者朋友們的真情回饋,在技術道路上互勉共進。

在創作本書的過程中,得到了很多朋友以及同事的幫助和支持,在此表示衷心的感謝!

感謝策劃編輯吳怡的支持和鼓勵,她不僅給出了非常多的寫作意見和建議,還不厭其煩地、認真地和筆者溝通,力爭做到清晰、準確、無誤地將內容呈現給讀者。

感謝我的家人,特別是我的兒子,能夠體諒我犧牲了陪伴他的時間。有了他們的支援和幫助,我才有時間和精力去完成寫作。
 

詳細資料

  • ISBN:9787111633655
  • 規格:平裝 / 212頁 / 16k / 19 x 26 x 1.06 cm / 普通級 / 單色印刷 / 初版
  • 出版地:中國

最近瀏覽商品

 

相關活動

  • 從「格」的概念出發|
 

購物說明

溫馨提醒您:若您訂單中有購買簡體館無庫存/預售書或庫存於海外廠商的書籍,建議與其他商品分開下單,以避免等待時間過長,謝謝。

大陸出版品書況:因裝幀品質及貨運條件未臻完善,書況與台灣出版品落差甚大,封面老舊、出現磨痕、凹痕等均屬常態,故簡體字館除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。 

 

請注意,部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

調貨時間:若您購買海外庫存之商品,於您完成訂購後,商品原則上約45個工作天內抵台(若有將延遲另行告知)。為了縮短等待的時間,建議您將簡體書與其它商品分開訂購,以利一般商品快速出貨。 

若您具有法人身份為常態性且大量購書者,或有特殊作業需求,建議您可洽詢「企業採購」。 

退換貨說明 

會員所購買的商品均享有到貨十天的猶豫期(含例假日)。退回之商品必須於猶豫期內寄回。 

辦理退換貨時,商品必須是全新狀態與完整包裝(請注意保持商品本體、配件、贈品、保證書、原廠包裝及所有附隨文件或資料的完整性,切勿缺漏任何配件或損毀原廠外盒)。退回商品無法回復原狀者,恐將影響退貨權益或需負擔部分費用。 

訂購本商品前請務必詳閱商品退換貨原則

  • 翦商作者新作79折
  • 針灸匠張寶旬
  • 浪漫小說精選3本72折