3

更快的JVM垃圾回收器:Shenandoah

 2 years ago
source link: https://www.jdon.com/58021
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

更快的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%。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK