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),请勿用于任何商业用途---