HotSpot虚拟机垃圾收集调优指南之ZGC垃圾收集器

ZGC垃圾收集器是一个可伸缩的低延迟垃圾收集器。

ZGC通过并发的执行所有耗时的工作,使得应用线程的暂停时间不会超过10ms。因此,它适合于要求低延迟,或者使用非常大的堆(如数TB)的应用程序。

ZGC垃圾收集器作为实验性的功能(Java 11版本),可以通过以下命令行选项启用:

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

设置堆大小

ZGC最重要的调优选项是设置最大堆的大小(-Xmx)。

由于ZGC是一个并发收集器,因此必须选择一个最大的堆大小,以便:

1)堆可以容纳应用程序的活动对象;

2)当GC正在运行时,堆中有足够的空间分配给应用程序。

具体需要多少空间,很大程度上取决于对象分配的速率和应用程序的活动对象大小。

通常来说,分配给ZGC的内存越多越好。

但是另一方面,我们又不希望浪费过多的内存。因此,就需要在内存使用和GC的执行频率之间找到一个平衡点。

设置并发GC线程数

第二个可能考虑要的调优选项,是设置并发GC的线程数(-XX:ConcGCThreads)。

ZGC具有启发式功能,可以自动选择合适的并发GC线程数。

基于启发式的选择,通常效果良好。但是根据不同应用程序的特性,可能需要对其进行相应的调整。

这个选项实际上决定了应该为GC分配多少CPU运行时间。

如果分配过多线程,那么GC将会占用更多的CPU时间,使得应用程序的CPU运行时间减少。

如果分配得太少,则应用程序产生垃圾的速度可能比GC收集的速度还要快。

参考

英文原文:https://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-collector1.html

翻译内容略有调整。


---转载本站文章请注明作者和出处 二进制之路(binarylife.icu),请勿用于任何商业用途---

留下评论