JDK 18三个垃圾回收G1/Parallel/Serial GC的改进提升点


整个 Hotspot GC 子组件的完整更改列表在这里,总共有 300 个更改。
 
通用改进

  • 所有 OpenJDK 垃圾收集器Parallel GC、Serial GC和ZGC 现在都支持字符串重复数据删除:-XX:+UseStringDeduplication使用该选项启用。
  • -XX:GCCardSizeInBytes:更改此值会对暂停时间长度产生重大影响。用来配置 card table card size,详细这里

 
下面是三者各自的改进点:
G1 GC
  • 记忆集重写大量减少了 G1 本机内存消耗,无需任何成本。它显着减少了记忆集的本机内存占用。
  • 取消了以前由某些内部数据结构强加的 32MB 区域大小限制。目前最大堆区域大小已设置为 512MB,但可能更大。
  • 在某些情况下,当 Java 应用程序即将退出时,G1 等待活动并发标记的完成以实际退出。这可能会导致很长的延迟,具体取决于该任务的复杂性。JDK 18 修复了这个问题,“立即”退出 VM。
  • 修复了JDK 14中引入的一个有趣的性能回归:在寻找对要收集的区域的引用时,疏散工作最初没有很好地分布。在较大的机器上,这暴露了工作窃取机制中的问题,导致停顿时间过长。
  • 更新了垃圾收集调优指南以反映 JDK 18 的 G1 的当前状态,改进了各个部分。

Serial GC:

  • 串行 GC增加了对归档堆对象的支持。这可以显着减少启动时间。