并行垃圾收集器(Parallel GC)是 JVM 中引入的最古老的垃圾收集算法之一,旨在利用现代多核系统的处理能力。并行GC旨在通过利用多个线程并行执行垃圾收集来减少GC暂停的影响。
什么时候使用并行GC?
如果您有以下任何一项要求,您可以考虑在您的应用程序中使用并行 GC:
如何启用并行GC?
要显式配置应用程序以使用并行 GC,您可以在启动 Java 应用程序时传递以下参数:
-XX:+UseParallelGC
此 JVM 参数指示 JVM 使用并行 GC 算法进行垃圾收集。但请注意,如果您没有显式指定垃圾收集算法,则在 Java 8 之前的所有服务器类 JVM 中,默认垃圾收集器都会设置为并行 GC。
并行 GC JVM 参数
1、堆和生成大小参数
2、基于目标的调整参数
为了实现垃圾收集的最佳性能,控制 GC 暂停时间和优化 GC 吞吐量至关重要,GC 吞吐量表示与应用程序执行相比专用于垃圾收集的时间量。在本节中,我们将探讨有助于基于目标的调整的关键 JVM 参数,使开发人员能够微调垃圾收集的这些方面。
-XX:MaxGCPauseMillis:此参数使开发人员能够指定垃圾收集所需的最大暂停时间(以毫秒为单位)。通过设置适当的值,开发人员可以调节 GC 暂停的持续时间,确保它们保持在可接受的限制内。
-XX:GCTimeRatio:此参数使用公式1 / (1 + N)设置垃圾收集时间与应用程序时间的比率,其中 N 是正整数值。此参数的目的是定义与应用程序执行时间相比所需的垃圾收集时间分配,以优化 GC 吞吐量。例如,让我们考虑 -XX:GCTimeRatio=19 的场景。使用该公式,目标是将总时间的 1/20 或 5% 分配给垃圾回收。这意味着对于组合的垃圾收集和应用程序执行的每20个时间单位(例如,毫秒),大约1个时间单位将被分配给垃圾收集,而剩余的19个时间单位将专用于应用程序执行。默认值是 99,它设置垃圾回收时间为 1% 的目标。
-XX:GCTimePercentage:该参数允许开发人员直接指定分配给垃圾收集的时间相对于应用程序执行时间(即GC吞吐量)的期望百分比。例如,设置“-XX:GCTimePercentage=5”表示将总时间的 5% 分配给垃圾回收的目标,其余 95% 专用于应用程序执行。
注意:开发人员可以选择使用“ -XX:GCTimeRatio ”或“ -XX:GCTimePercentage ”作为彼此的替代选项。这两个选项都可以灵活地表达垃圾收集所需的时间分配。我更喜欢使用“-XX:GCTimePercentage”而不是“-XX:GCTimeRatio”,因为它易于理解。
3、其他参数
除了前面讨论的 JVM 参数之外,还有一些其他参数可用于调整并行 GC 算法。让我们来探索一下它们。
调整并行 GC 行为
研究并行 GC 的性能特征最好通过分析 GC 日志来实现。GC 日志包含有关垃圾收集事件、内存使用情况和其他相关指标的详细信息。有多种工具可以帮助分析 GC 日志,例如GCeasy、IBM GC & Memory Visualizer、HP Jmeter、Google Garbage cat。通过使用这些工具,您可以可视化内存分配模式、识别潜在瓶颈并评估垃圾收集的效率。这样可以在微调并行 GC 以获得最佳性能时做出明智的决策。