openjdk版本的問題,透過圖書和論文來找解法和答案更準確安心。 我們找到下列包括價格和評價等資訊懶人包

openjdk版本的問題,我們搜遍了碩博士論文和台灣出版的書籍,推薦周志明寫的 深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版) 和彭成寒的 新一代垃圾回收器ZGC設計與實現都 可以從中找到所需的評價。

另外網站了解Oracle JDK 版本的轉變也說明:Oracle JDK、Oracle OpenJDK 以及Java 8 公開更新的結束 ... Oracle BCL 授權的JDK 過去包含的商業功能在OpenJDK 版本無法使用,正如承諾,過去幾 ...

這兩本書分別來自機械工業 和機械工業所出版 。

國立交通大學 資訊科學與工程研究所 蔡淳仁所指導 林祐辰的 符合 Java 8 標準之 InvokeDynamic 指令在 CVM 之實作 (2018),提出openjdk版本關鍵因素是什麼,來自於爪哇、虛擬機器、調用。

而第二篇論文國立清華大學 資訊系統與應用研究所 鍾葉青所指導 古耶莫的 Google Android 平台上的混合式即時編譯器 (2011),提出因為有 即時編譯器、直譯器、虛擬機器、編譯器的重點而找出了 openjdk版本的解答。

最後網站OpenJDK 生命周期和支持政策則補充:索引. 概述 OpenJDK 生命周期和支持政策 OpenJDK 更新发布日期 OpenJDK 生命周期和RHEL 版本 OpenJDK 生命周期日期和Windows ...

接下來讓我們看這些論文和書籍都說些什麼吧:

除了openjdk版本,大家也想知道這些:

深入理解Java虛擬機:JVM高級特性與最佳實踐(第3版)

為了解決openjdk版本的問題,作者周志明 這樣論述:

這是一部從工作原理和工程實踐兩個維度深入剖析JVM的著作,是電腦領域公認的經典,繁體版在臺灣也頗受歡迎。 自2011年上市以來,前兩個版本累計印刷36次,銷量超過30萬冊,兩家主要網路書店的評論近90000條,內容上近乎零差評,是原創電腦圖書領域不可逾越的豐碑。 第3版在第2版的基礎上做了重大修訂,內容更豐富、實戰性更強:根據新版JDK對內容進行了全方位的修訂和升級,圍繞新技術和生產實踐新增逾10萬字,包含近50%的全新內容,並對第2版中含糊、瑕疵和錯誤內容進行了修正。 全書一共13章,分為五大部分: ●第一部分(第1章)走近Java 系統介紹了Java的技術體系、發展歷程、虛擬機器家族

,以及動手編譯JDK,瞭解這部分內容能對學習JVM提供良好的指引。 ●第二部分(第2~5章)自動記憶體管理 詳細講解了Java的記憶體區域與記憶體溢出、垃圾收集器與記憶體分配策略、虛擬機器性能監控與故障排除等與自動記憶體管理相關的內容,以及10餘個經典的性能優化案例和優化方法; ●第三部分(第6~9章)虛擬機器執行子系統 深入分析了虛擬機器執行子系統,包括類檔結構、虛擬機器類載入機制、虛擬機器位元組碼執行引擎,以及多個類載入及其執行子系統的實戰案例; ●第四部分(第10~11章)程式編譯與代碼優化 詳細講解了程式的前、後端編譯與優化,包括前端的易用性優化措施,如泛型、主動裝箱拆箱、條件編

譯等的內容的深入分析;以及後端的性能優化措施,如虛擬機器的熱點探測方法、HotSpot的即時編譯器、提前編譯器,以及各種常見的編譯期優化技術; ●第五部分(第12~13章)高效併發 主要講解了Java實現高併發的原理,包括Java的記憶體模型、執行緒與協程,以及執行緒安全和鎖優化。 全書以實戰為導向,通過大量與實際生產環境相結合的案例分析和展示瞭解決各種Java技術難題的方案和技巧。   周志明(博士) 資深Java技術專家-機器學習技術專家和企業級開發技術專家,現任遠光軟體研究院院長。 開源技術的積極宣導者和推動者,對電腦科學相關的多個領域都有深刻的見解,尤其是人工智慧

-Java技術和敏捷開發等,對虛擬機器技術有非常深入的研究。 撰寫了《深入理解Java虛擬機器》《深入理解OSGi》《智慧的疆界》等多本著作,翻譯了《Java虛擬機器規範》等著作。其中《深入理解Java虛擬機器》已累計印刷逾36次,總銷超過30萬冊,成為原創電腦專業圖書領域難以逾越的豐碑。   前言 致謝 【第一部分 走近Java】 第1章 走近Java 2 1.1 概述 2 1.2 Java技術體系 3 1.3 Java發展史 4 1.4 Java虛擬機器家族 12 1.4.1 虛擬機器始祖:Sun Classic/Exact VM 12 1.4.2 武林盟主:Hot

Spot VM 13 1.4.3 小家碧玉:Mobile/Embedded VM 14 1.4.4 天下第二:BEA JRockit/IBM J9 VM 15 1.4.5 軟硬合璧:BEA Liquid VM/Azul VM 16 1.4.6 挑戰者:Apache Harmony/Google Android Dalvik VM 17 1.4.7 沒有成功,但並非失敗:Microsoft JVM及其他 18 1.4.8 百家爭鳴 19 1.5 展望Java技術的未來 21 1.5.1 無語言傾向 21 1.5.2 新一代即時編譯器 23 1.5.3 向Native邁進 24 1.5.4 靈活的

胖子 26 1.5.5 語言語法持續增強 27 1.6 實戰:自己編譯JDK 29 1.6.1 獲取源碼 29 1.6.2 系統需求 31 1.6.3 構建編譯環境 33 1.6.4 進行編譯 34 1.6.5 在IDE工具中進行源碼調試 36 1.7 本章小結 39   【第二部分 自動記憶體管理】 第2章 Java記憶體區域與記憶體溢出異常 42 2.1 概述 42 2.2 運行時資料區域 42 2.2.1 程式計數器 43 2.2.2 Java虛擬機器棧 43 2.2.3 本地方法棧 44 2.2.4 Java堆 44 2.2.5 方法區 46 2.2.6 運行時常量池 47 2.2.7

 直接記憶體 47 2.3 HotSpot虛擬機器對象探秘 48 2.3.1 對象的創建 48 2.3.2 物件的記憶體佈局 51 2.3.3 對象的訪問定位 52 2.4 實戰:OutOfMemoryError異常 53 2.4.1 Java堆溢出 54 2.4.2 虛擬機器棧和本地方法棧溢出 56 2.4.3 方法區和運行時常量池溢出 61 2.4.4 本機直接記憶體溢出 65 2.5 本章小結 66 第3章 垃圾收集器與記憶體分配策略 67 3.1 概述 67 3.2 對象已死? 68 3.2.1 引用計數演算法 68 3.2.2 可達性分析演算法 70 3.2.3 再談引用 71 3

.2.4 生存還是死亡? 72 3.2.5 回收方法區 74 3.3 垃圾收集演算法 75 3.3.1 分代收集理論 75 3.3.2 標記-清除演算法 77 3.3.3 標記-複製演算法 78 3.3.4 標記-整理演算法 79 3.4 HotSpot的演算法細節實現 81 3.4.1 根節點枚舉 81 3.4.2 安全點 82 3.4.3 安全區域 83 3.4.4 記憶集與卡表 84 3.4.5 寫屏障 85 3.4.6 併發的可達性分析 87 3.5 經典垃圾收集器 89 3.5.1 Serial收集器 90 3.5.2 ParNew收集器 92 3.5.3 Parallel Scav

enge收集器 93 3.5.4 Serial Old收集器 94 3.5.5 Parallel Old收集器 95 3.5.6 CMS收集器 96 3.5.7 Garbage First收集器 98 3.6 低延遲垃圾收集器 104 3.6.1 Shenandoah收集器 105 3.6.2 ZGC收集器 112 3.7 選擇合適的垃圾收集器 121 3.7.1 Epsilon收集器 121 3.7.2 收集器的權衡 121 3.7.3 虛擬機器及垃圾收集器日誌 122 3.7.4 垃圾收集器參數總結 127 3.8 實戰:記憶體分配與回收策略 129 3.8.1 對象優先在Eden分配 1

30 3.8.2 大物件直接進入老年代 131 3.8.3 長期存活的物件將進入老年代 132 3.8.4 動態物件年齡判定 134 3.8.5 空間分配擔保 135 3.9 本章小結 137 第4章 虛擬機器性能監控-故障處理工具 138 4.1 概述 138 4.2 基礎故障處理工具 138 4.2.1 jps:虛擬機器進程狀況工具 141 4.2.2 jstat:虛擬機器統計資訊監視工具 142 4.2.3 jinfo:Java配置資訊工具 143 4.2.4 jmap:Java記憶體映射工具 144 4.2.5 jhat:虛擬機器堆轉儲快照分析工具 145 4.2.6 jstack:

Java堆疊跟蹤工具 146 4.2.7 基礎工具總結 148 4.3 視覺化故障處理工具 151 4.3.1 JHSDB:基於服務性代理的調試工具 152 4.3.2 JConsole:Java監視與管理主控台 157 4.3.3 VisualVM:多合-故障處理工具 164 4.3.4 Java Mission Control:可持續線上的監控工具 171 4.4 HotSpot虛擬機器外掛程式及工具 175 4.5 本章小結 180 第5章 調優案例分析與實戰 181 5.1 概述 181 5.2 案例分析 181 5.2.1 大記憶體硬體上的程式部署策略 182 5.2.2 集群間同

步導致的記憶體溢出 184 5.2.3 堆外記憶體導致的溢出錯誤 185 5.2.4 外部命令導致系統緩慢 187 5.2.5 伺服器虛擬機器進程崩潰 187 5.2.6 不恰當資料結構導致記憶體佔用過大 188 5.2.7 由Windows虛擬記憶體導致的長時間停頓 189 5.2.8 由安全點導致長時間停頓 190 5.3 實戰:Eclipse運行速度調優 192 5.3.1 調優前的程式運行狀態 193 5.3.2 升級JDK版本的性能變化及相容問題 196 5.3.3 編譯時間和類載入時間的優化 200 5.3.4 調整記憶體設置控制垃圾收集頻率 203 5.3.5 選擇收集器降低延遲

206 5.4 本章小結 209   【第三部分 虛擬機器執行子系統】 第6章 類檔結構 212 6.1 概述 212 6.2 無關性的基石 212 6.3 Class類檔的結構 214 6.3.1 魔數與Class檔的版本 215 6.3.2 常量池 218 6.3.3 訪問標誌 224 6.3.4 類索引-父類索引與介面索引集合 225 6.3.5 欄位元表集合 226 6.3.6 方法表集合 229 6.3.7 屬性工作表集合 230 6.4 位元元組碼指令簡介 251 6.4.1 位元組碼與資料類型 251 6.4.2 載入和存儲指令 253 6.4.3 運算指令 254 6.4.4

 類型轉換指令 255 6.4.5 物件創建與訪問指令 256 6.4.6 運算元棧管理指令 256 6.4.7 控制轉移指令 257 6.4.8 方法調用和返回指令 257 6.4.9 異常處理指示 258 6.4.10 同步指令 258 6.5 公有設計,私有實現 259 6.6 Class檔結構的發展 260 6.7 本章小結 261   第7章 虛擬機器類載入機制 262 7.1 概述 262 7.2 類載入的時機 263 7.3 類載入的過程 267 7.3.1 載入 267 7.3.2 驗證 268 7.3.3 準備 271 7.3.4 解析 272 7.3.5 初始化 277 7

.4 類載入器 279 7.4.1 類與類載入器 280 7.4.2 雙親委派模型 281 7.4.3 破壞雙親委派模型 285 7.5 Java模組化系統 287 7.5.1 模組的相容性 288 7.5.2 模組化下的類載入器 290 7.6 本章小結 292   第8章 虛擬機器位元組碼執行引擎 293 8.1 概述 293 8.2 運行時棧幀結構 294 8.2.1 區域變數表 294 8.2.2 運算元棧 299 8.2.3 動態連接 300 8.2.4 方法返回位址 300 8.2.5 附加資訊 301 8.3 方法調用 301 8.3.1 解析 301 8.3.2 分派 303

8.4 動態類型語言支援 315 8.4.1 動態類型語言 316 8.4.2 Java與動態類型 317 8.4.3 java.lang.invoke包 318 8.4.4 invokedynamic指令 321 8.4.5 實戰:掌控方法分派規則 324 8.5 基於棧的位元組碼解釋執行引擎 326 8.5.1 解釋執行 327 8.5.2 基於棧的指令集與基於寄存器的指令集 328 8.5.3 基於棧的解譯器執行過程 329 8.6 本章小結 334   第9章 類載入及執行子系統的案例與實戰 335 9.1 概述 335 9.2 案例分析 335 9.2.1 Tomcat:正統的類載入

器架構 335 9.2.2 OSGi:靈活的類載入器架構 338 9.2.3 位元組碼生成技術與動態代理的實現 341 9.2.4 Backport工具:Java的時光機器 345 9.3 實戰:自己動手實現遠端執行功能 348 9.3.1 目標 348 9.3.2 思路 349 9.3.3 實現 350 9.3.4 驗證 355 9.4 本章小結 356   【第四部分 程式編譯與代碼優化】 第10章 前端編譯與優化 358 10.1 概述 358 10.2 Javac編譯器 359 10.2.1 Javac的源碼與調試 359 10.2.2 解析與填充符號表 362 10.2.3 注解處理

器 363 10.2.4 語義分析與位元組碼生成 364 10.3 Java語法糖的味道 367 10.3.1 泛型 367 10.3.2 自動裝箱-拆箱與遍歷迴圈 375 10.3.3 條件編譯 377 10.4 實戰:插入式注解處理器 378 10.4.1 實戰目標 379 10.4.2 代碼實現 379 10.4.3 運行與測試 385 10.4.4 其他應用案例 386 10.5 本章小結 386 第11章 後端編譯與優化 388 11.1 概述 388 11.2 即時編譯器 389 11.2.1 解譯器與編譯器 389 11.2.2 編譯物件與觸發條件 392 11.2.3 編譯過

程 397 11.2.4 實戰:查看及分析即時編譯結果 398 11.3 提前編譯器 404 11.3.1 提前編譯的優劣得失 405 11.3.2 實戰:Jaotc的提前編譯 408 11.4 編譯器優化技術 411 11.4.1 優化技術概覽 411 11.4.2 方法內聯 415 11.4.3 逃逸分析 417 11.4.4 公共子運算式消除 420 11.4.5 陣列邊界檢查消除 421 11.5 實戰:深入理解Graal編譯器 423 11.5.1 歷史背景 423 11.5.2 構建編譯調試環境 424 11.5.3 JVMCI編譯器介面 426 11.5.4 代碼中間表示 429

11.5.5 代碼優化與生成 432 11.6 本章小結 436   【第五部分 高效併發】 第12章 Java記憶體模型與執行緒 438 12.1 概述 438 12.2 硬體的效率與一致性 439 12.3 Java記憶體模型 440 12.3.1 主記憶體與工作記憶體 441 12.3.2 記憶體間交交交互操作 442 12.3.3 對於volatile型變數的特殊規則 444 12.3.4 針對long和double型變數的特殊規則 450 12.3.5 原子性-可見性與有序性 450 12.3.6 先行發生原則 452 12.4 Java與執行緒 455 12.4.1 執行緒的實現

455 12.4.2 Java執行緒調度 458 12.4.3 狀態轉換 460 12.5 Java與協程 461 12.5.1 內核執行緒的局限 461 12.5.2 協程的復蘇 462 12.5.3 Java的解決方案 464 12.6 本章小結 465 第13章 執行緒安全與鎖優化 466 13.1 概述 466 13.2 執行緒安全 466 13.2.1 Java語言中的執行緒安全 467 13.2.2 執行緒安全的實現方法 471 13.3 鎖優化 479 13.3.1 自旋鎖與自我調整自旋 479 13.3.2 鎖消除 480 13.3.3 鎖粗化 481 13.3.4 羽量級

鎖 481 13.3.5 偏向鎖 483 13.4 本章小結 485   附錄A 在Windows系統下編譯OpenJDK 6 486 附錄B 展望Java技術的未來(2013年版) 493 附錄C 虛擬機器位元元組碼指令表 499 附錄D 物件查詢語言(OQL)簡介 506 附錄E JDK歷史版本軌跡 512  

符合 Java 8 標準之 InvokeDynamic 指令在 CVM 之實作

為了解決openjdk版本的問題,作者林祐辰 這樣論述:

CVM是由昇陽電腦公司所設計的Java virtual machine (JVM)。其主要執行的環境為有網路連結的設備。相較於其它用於嵌入式系統的JVM,CVM的優點除了程式碼本身較小、具有高效能的 Just-In-Time編譯技術、支援基本Java程式執行所需的最小核心 class libraries只要一百二十六個classes、並且是目前能支援最多處理器平台的Java VM。然而昇陽電腦所釋出的開放原始碼版本的CVM僅支援到Java 2 Micro Edition (J2ME)的VM規範,在甲骨文公司收購昇陽電腦之後,他們就停止釋出新版CVM的原始碼了。本論文的主要目的是要修改J2ME

的CVM原始碼,以支援新的JVM規格中InvokeDynamic bytecode的執行。InvokeDynamic指令為Java 7新增的功能,提供使用者一個較簡潔的 method 呼叫界面。特別是在Java 8的標準中,廣泛使用了Lambda表示式進行method 呼叫,而在VM底層,Lambda 表示式會產生出InvokeDynamic的bytecode指令。本論文提出對CVM作修改的方法,使其能夠支援符合Java 8規範之InvokeDynamic指令,並且補上該指令所需要之class library,論文目標是讓修改後的J2ME CVM可以通過OpenJDK 8 內附的lambda

測試並執行包含lambda表示式之Java程式,並進而執行一些 Java 8 的應用程式。

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

為了解決openjdk版本的問題,作者彭成寒 這樣論述:

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 S

henandoah 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提交問題。期待能夠得到讀者朋友們的真情回饋,在技術道路上互勉共進。 在創作本書的過程中,得到了很多朋友以及同事的幫助和支持,在此表示衷心的感謝! 感謝策劃編輯吳怡的支持和鼓勵,她不僅給出了非常多的寫作意見和建議,還不厭其煩地、認真地和筆者溝通,力爭做到清晰、準確、無誤地將內容呈現給讀者。 感謝我的家人,特別是我的兒子,能夠體諒我犧牲了陪伴他的時間。有了他們的支援和幫助,我才有時間和精力去完成寫作。

Google Android 平台上的混合式即時編譯器

為了解決openjdk版本的問題,作者古耶莫 這樣論述:

Google Android 作業系統被大量使用在移動裝置中,其採用Dalvik虛擬機器做為執行程式的主要平台。Dalvik虛擬機器被視為一種Java虛擬機器,但需先將Java程式轉換成Google 自訂的DEX (Dalvik Executable)中間碼格式才能執行。他是一個register-based的虛擬機器,其採用trace-based的即時編譯器來加速程式執行中頻繁執行的部分。瀏覽器的JavaScript引擎通常採用一種由method-based以及trace-based組合而成的即時編譯技術,但其較推崇trace-based 的即時編譯器,主要原因是在於trace-based即

時編譯器可優化頻繁執行的指令,特別是優化迴圈的能力;此外,即時編譯器可知道JavaScript執行時期的變數型態,並在假設變數是某種型態時產生不同的原生版本使執行速度更為快速。但是,Android的Dalvik虛擬機器對於DEX指令的執行並沒有保存其變數的型態,而是利用運算元來傳達運算子的可能型態;同時採用相當簡易的trace-based即時編譯器,其中並不包含上述所提到的優化。我們為Dalvik虛擬機器設計了一method-based即時編譯器,與以底層虛擬機(Low Level Virtual Machine)實作的提前式編譯器相比有更好的效能,且利用Android市集上公認的測試基準與D

alvik虛擬機器中的trace-based即時編譯器比較之下,我們的method-based即時編譯器擁有更好的效能表現。此外,藉由分享剖析以及編譯相關的資訊,將method-based和trace-based兩種技術適當混合,各取其優劣可以大幅度的提升效能;為了使快速的trace-based即時編譯器能和高度優化的method-based即時編譯器結合,我們一旦發現有機會達到提升效能的目的時就會利用剖析器選擇method給method-based即時編譯器編譯。