JDK 18修復了三個重要功能 - malloc
現在讓我們談談 JDK 18 中的新功能(從 ZGC 的角度來看)。
字串重複資料刪除
字串重複資料刪除是一個 JVM 特性 ( -XX:+UseStringDeduplication),它已經存在了很長一段時間。它透過自動刪除支援 String 物件的相同字元陣列來幫助減少 Java 堆記憶體使用。例如,如果堆上存在兩個 String 物件,並且它們都指向一個包含字元“Java”的後備陣列,那麼其中一個 String 物件將被修改,以便兩個 String 物件指向同一個陣列,而另一個陣列將變得無法訪問並受到垃圾收集。這可以幫助一些應用程式減少相當多的堆記憶體使用量,因為 String 物件可以佔用 Java 堆的重要部分,並且在這些物件中查詢重複項是相當普遍的。
類的解除安裝問題得到修正
我們在ZGC郵件列表中收到一份關於效能問題的報告。結果發現這是一個10年前的錯誤,可以追溯到PermGen的刪除。
因此,大約10年前,移除PermGen的補丁對一個處理Inline Cache清理的函式做了一些修改。Inline Cache是一種投機性的最佳化技術,由JVM用來加快Java中的方法呼叫速度。當GC解除安裝未使用的類和編譯的方法時,一些Inline Cache需要被清理,以便它們不再引用任何未載入的實體。
事實證明,這個補丁包含了一個小而重要的編輯錯誤,即縮排和作用域被混淆了。光看補丁很難發現這個錯誤,因為有問題的程式碼也被移動了。這個錯誤導致了一些內聯快取被錯誤地清理了。然而,這種不正確的清理並沒有導致任何明顯的問題,比如JVM崩潰。相反,它引起了一個惡性迴圈,GC和Java執行緒在如何清理這些快取方面存在分歧,併為之爭吵。最終的結果是,在某些情況下,類的解除安裝可能需要很長的時間才能完成。由於這個問題的根本原因是GC和併發執行的Java執行緒之間的不良互動,所以它隻影響到做併發類解除安裝的GC(如ZGC)。做 "停止世界 "類解除安裝的GC(如SerialGC、ParallelGC和G1GC)不受影響,因為這種不良的互動永遠不會出現,因為Java執行緒從來不與GC同時執行。
幸運的是,一旦這個問題被發現,修復工作就很簡單了。如果你對更多的細節感興趣,你可以在相應的拉動請求中閱讀所有關於它的內容。
Linux/PowerPC支援
早在2013年,也就是在ZGC出現之前,JEP 175就已經建立了,以便為OpenJDK帶來Linux/PowerPC(以及AIX/PowerPC)支援。最初的移植是作為JDK 8u20的一部分發貨的,並一直保持到現在。支援這一平臺的努力從一開始就得到了我們在SAP的朋友的資助。
因此,當聽到也是SAP提供了使ZGC在Linux/PowerPC上可用的補丁時,可能不會感到驚訝。增加對新的CPU架構的支援,主要是在直譯器和兩個JIT編譯器中實現ZGC的各種障礙(負載障礙、nmethod進入障礙和堆疊水印障礙)。該補丁大約有1200行程式碼。
從JDK 18開始,ZGC現在可以在以下平臺上執行(更多細節見此表)。
- Linux/x64
- Linux/AArch64
- Linux/PowerPC
- macOS/x64
- macOS/AArch64
- Windows/x64
- Windows/AArch64
總結
- 現在支援JVM選項-XX:+UseStringDeduplication。這個功能(預設情況下是禁用的)告訴ZGC尋找並重複利用相同的字元陣列來支援String物件,以減少整體堆記憶體的使用。
- 修正了一個10年前的錯誤,該錯誤有時會導致類的解除安裝時間非常長。
- ZGC現在可以在Linux/PowerPC上執行,這要感謝SAP的人。
相關文章
- Node.js 8有哪些重要功能和修復?Node.js
- JDK的第三個LTS版本JDK17來了JDK
- JDK 7u9和6u37釋出,修復重要安全漏洞JDK
- Ubuntu釋出PHP重要補丁修復多個PHP漏洞UbuntuPHP
- 今天修復資料寫了個pl/sqlSQL
- Shotwell 0.15釋出了!新增了更多新功能及修復!
- Gitea 1.11.1 釋出了,修復了 14 個 bugGit
- JDK21來了!附重要更新說明JDK
- RobotGo v0.46.0 釋出, 修復重要 bugOTGGo
- 微軟修復了五個SandboxEscaper零日漏洞中的四個微軟
- 微軟7月累積更新來了!修復13個高危漏洞微軟
- Win10系統三大功能或累積更新:修復大量BUGWin10
- 筆記本硬碟壞了修復方法教程 膝上型電腦硬碟壞了怎麼修復?筆記硬碟
- 微軟修復了Windows 10 1809中的一個網路服務bug 升級遮蔽已解除微軟Windows
- Claws Mail 3.11.0 修復了POODLE 漏洞AI
- GitLab 中文版正式釋出 17.5,修復多個漏洞,釋出多個功能Gitlab
- 微軟下週將釋出三個補丁仍有漏洞未修復微軟
- 微軟三月補丁更新修復3個0day漏洞微軟
- 『學了就忘』Linux啟動引導與修復 — 74、Linux系統的修復模式(光碟修復模式)Linux模式
- 修復資料庫壞塊之三資料庫
- 如何實現一個malloc
- OpenJDK JDK 18第一個版本釋出JDK
- JDK 19:Java 19五個新功能 - infoworldJDKJava
- JDK 18三個垃圾回收G1/Parallel/Serial GC的改進提升點JDKParallelGC
- Android 5月安全更新來了!修復42個漏洞:包括4個關鍵漏洞Android
- 電腦系統壞了怎麼修復 電腦無法正常啟動修復教程
- Win10六月累積更新來了!共修復49個漏洞Win10
- [資訊]微軟於補丁日修復了 20 個嚴重漏洞(11.16)微軟
- CVE-2018-14847:一個能修復自己的RouterOS漏洞ROS
- JDK 18 / Java 18 正式釋出:九項 JDK 增強JDKJava
- 電腦系統崩潰怎麼修復 修復電腦系統的三種方法
- Win10螢幕亮度切換終於正常了 這個煩人Bug終於修復了Win10
- PrestaShop網站漏洞修復如何修復REST網站
- CSS三個非常重要的特性分享!CSS
- JDK 18:Java 18預覽 -infoworldJDKJava
- 修復一個kubernetes叢集
- 2018深入解析Android熱修復技術Android
- 英特爾修復安全引擎高危漏洞;戴爾修復SupportAssist漏洞;三星釋出新品手機