更多互联网精彩资讯、工作效率提高关注【飞鱼在浪屿】(日更新)

JDK17早已发布了几个月,它除了包含了新的语言功能。在性能相比老版本的JDK也提高明显。与之前的LTS版本JDK8和JDK11相比,这一点尤为显著。性能的大部份改进来自JVM中的新功能和优化,在这篇文章中,重点将置于垃圾搜集领域的改进上.

这篇文章囊括Parallel,GC和ZGC中取得的进展。第四个搜集器SerialGC,不包括在此比较中。Serial是一个稳定的搜集器,开支很低linux运维招聘,

不同的使用场景

JDK 17 JVM垃圾收集器优化_linux 64位jdk15下载_ZGC性能提升分析

决定使用那个垃圾搜集器并不总是显而易见的。重要的是要明白,要作出正确的选择,首先须要弄清楚主要目标是哪些。一般目标是优化吞吐量、延迟和/或占用空间。最佳解决方案其实是针对上述所有情况进行优化,并在每种情况下获得最佳性能。搜集器在各个方面都力求尽可能优化,但它们致力进行不同的权衡以支持不同的场景用例。

快速总结不同领域进行改进的涵义:

做不同的权衡并不意味着不能从各个方面改进搜集器。在改进搜集器时linux 64位jdk15下载,很大一部份是确保尽可能有效地进行权衡。另一个全面改进的好方式是重新评估旧的设计决策并提出更好的解决方案。

自JDK8以来的进展

JDK 17 JVM垃圾收集器优化_linux 64位jdk15下载_ZGC性能提升分析

自JDK8以来取得的进展,所有搜集器或多或少在各个方面都有所改进。为了更好地显示进度,下边的比较使用标准化分数单独比较搜集器,而不是原始分数。以下数据来自SPECjbb®2015的测试

。这是一个众所周知且稳定的基准测试,它除了关注GC性能,为此结果也会显示整个Java平台的进展。

ZGC是在JDK11中引入的(从JDK15开始生产就绪),因而我们只有两个ZGC数据点,而G1和Parallel有三个数据点。

吞吐量

JDK 17 JVM垃圾收集器优化_ZGC性能提升分析_linux 64位jdk15下载

ZGC性能提升分析_JDK 17 JVM垃圾收集器优化_linux 64位jdk15下载

吞吐量指标,与旧版本相比linux 64位jdk15下载linux主机,所有搜集器都有显着改进。ZGC是这方面改进最大的一个。G1和Parallel在此设置中一直具有更好的原始吞吐量,但扩充了堆,ZGC填补了这一差别。

提到这个指标时,我们不仅仅是在检测GC性能。Java平台的其他部份,比如JIT编译器,也有助于这种改进。

延后

JDK 17 JVM垃圾收集器优化_linux 64位jdk15下载_ZGC性能提升分析

linux 64位jdk15下载_ZGC性能提升分析_JDK 17 JVM垃圾收集器优化

G1展示了最好的延后。ZGC也有了很大的改进。ZGC在保持短暂停顿方面做得十分好。

JDK 17 JVM垃圾收集器优化_ZGC性能提升分析_linux 64位jdk15下载

JDK17中的ZGC高于亚微秒级暂停时间。G1的目标是在延后和吞吐量之间保持平衡,高于其默认的200微秒暂停时间目标。该图表还包括一个额外的栏,用于快速显示不同搜集器怎样处理可扩充性。ZGC被设计为具有不随堆大小扩充的暂停时间,当堆扩大到128GB时就是这些情况。从暂停时间的角度来看,G1比Parallel更好地处理更大的堆,由于它更具有保持暂停时间稳定性。

峰值显存开支

ZGC性能提升分析_JDK 17 JVM垃圾收集器优化_linux 64位jdk15下载

ZGC性能提升分析_linux 64位jdk15下载_JDK 17 JVM垃圾收集器优化

此图表比较了三个不同搜集器的峰值本机显存开支。Parallel和ZGC都十分稳定,因而在这儿查看原始数字也更有意义。G1在这方面确实有所改进。

虽然其他搜集器没有降低开支,她们在其他方面有所改进,而毋须使用额外的显存。

是时侯升级

与旧版本相比,JDK17的整体性能要好得多,无论使用哪种搜集器。这么如今可能是重新评估要使用的GC的好时机。在JDK8Parallel是默认设置,但在JDK9中修改为G1。G1以比Parallel更高的速率改进,但依然存在Parallel是最佳选择的使用场景。随着ZGC(自JDK15以来的生产就绪)的引入,还有第三种高性能代替方案。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复