更快的JVM垃圾回收器:Shenandoah
在本月早些時候的 re:Invent 年度使用者大會上,AWS推出了開源Shenandoah垃圾收集器的變體,作為其 OpenJDK 發行版Corretto 的第 17 版的預覽。Shenandoah 最初是由 Red Hat 開發的,但最近兩家公司的演算法的“分代模式”提高了吞吐量並大大減少了暫停時間。
Shenandoah是已有的垃圾回收器ZGC、CMS、G1競爭者,它是 JVM 的第一個併發分代垃圾收集器。
新的垃圾收集器Shenandoah提高了效率,因為它只關注記憶體中最有可能存在垃圾的地方,從而減少了暫停應用程式以完成清理工作的時間。
Java 一直都有自動記憶體管理。定期 JVM 垃圾收集器會定期遍歷記憶體,以在物件圖中找到那些不再被程式引用的丟棄變數和其他位,然後將其刪除,從而釋放記憶體。它在當時是革命性的:這種自動化提供了優於 C 和 C++ 等舊語言的優勢,在這些語言中,開發人員必須手動釋放不再使用的記憶體,否則會導致安全漏洞。
然而,Java 自動記憶體管理的缺點是相當大的:為了對可以扔掉和不能扔掉的東西進行排序,垃圾收集器必須完全暫停所有程式執行緒以清掃記憶體。這使得該語言不適合某些對時間敏感的關鍵任務任務並減慢大型 Java 應用程式的速度。
為了減少停機時間,Shenandoah 引入了一種稱為分代垃圾收集的新技術。它適用於世代假設:即在大多數情況下,較年輕的物件比較舊的物件更常被丟棄。
Shenandoah 識別出包含新物件的區域,這些物件來自已經至少在一個垃圾收集中倖存下來的物件,這些物件被分成兩代——年輕的和年老的——然後更頻繁地掃過年輕的物件。因為收集器可以專注於包含最多垃圾的區域,所以它降低了暫停時間,縮短了收集週期,並減少了實現低暫停時間所需的記憶體量。
在大多數情況下,基於新一代的 Shenandoah 能夠將暫停時間減少到幾乎無法檢測的 10 毫秒以下,整體應用程式吞吐量不到 5%。
相關文章
- 從原理聊JVM(三):詳解現代垃圾回收器Shenandoah和ZGCJVMNaNGC
- JVM垃圾回收器JVM
- JVM系列(六) – JVM垃圾回收器JVM
- JVM系列(六) - JVM垃圾回收器JVM
- JVM 垃圾回收演算法和垃圾回收器JVM演算法
- 理解JVM(七):垃圾回收器JVM
- JVM 低延遲垃圾收集器 Shenandoah 和 ZGCJVMNaNGC
- JVM(五)垃圾回收器的前世今生JVM
- [JVM]垃圾回收JVM
- JVM垃圾回收JVM
- 【JVM】垃圾回收器總結(2)——七種垃圾回收器型別JVM型別
- 深入探究JVM之垃圾回收器JVM
- JVM 中的垃圾回收JVM
- JVM垃圾回收(下)JVM
- JVM垃圾回收概述JVM
- JVM - 垃圾回收概述JVM
- JVM垃圾回收器、記憶體分配與回收策略JVM記憶體
- 關於JVM的垃圾回收JVM
- jvm的垃圾回收機制JVM
- [效能][JVM]jvm垃圾回收機制JVM
- jvm 自動垃圾回收JVM
- JVM垃圾回收機制JVM
- JVM-垃圾回收篇JVM
- 淺談JVM垃圾回收JVM
- JVM垃圾回收歷險JVM
- JVM 垃圾回收機制JVM
- ☕[JVM技術指南](3)垃圾回收子系統(Garbage Collection System)之垃圾回收器JVM
- JVM虛擬機器-垃圾回收機制與垃圾收集器概述JVM虛擬機
- 7種jvm垃圾回收器,這次全部搞懂JVM
- JVM垃圾回收演算法JVM演算法
- 淺談JVM與垃圾回收JVM
- 帶你掌握JVM垃圾回收JVM
- 再看JVM:垃圾回收那些事JVM
- jvm(4)---垃圾回收(哪些物件可以被回收)JVM物件
- 秒懂JVM的垃圾回收機制JVM
- JVM - 方法區(永久代)的垃圾回收JVM
- 聊聊JVM的垃圾回收機制GCJVMGC
- JVM系列(五) - JVM垃圾回收演算法JVM演算法