G1 垃圾回收器 - 一口 Java

如果您使用的是 JDK 11 或更高版本,并且不确定您正在使用哪个垃圾回收器,那么您可能正在使用 G1。G1(Garbage First)垃圾回收器 (GC) 自 JDK 9 以来一直是默认的 GC 1。在本文中,我们将简要介绍 G1,并提供一些关于如何调整它的提示。

G1 GC 概述

G1 最初在 JDK 7 中添加到 JDK 中,然后在 JDK 9 中成为默认的 GC。G1 尝试平衡暂停时间和吞吐量。

G1 是一个并发且并行的 GC。虽然这听起来像是重复,但这些是 GC 中不同的概念。并发是指可以在应用程序运行时执行工作的 GC,尽管 G1 无法在应用程序运行时执行所有工作,并且仍然有停止世界事件。并行意味着 GC 可以使用多个线程来执行其工作。

G1 GC 开发

G1 仍在积极开发中。每个 JDK 版本都会对吞吐量、启动、暂停时间和内存占用进行多项改进。最近的更改包括

主要的计划未来更改包括

G1 GC 调整

在大多数情况下,G1 的默认配置应提供最佳性能。但是,如果您的应用程序具有独特的性能要求或已经进行了其他性能优化,则可能需要进行 GC 调整。G1 有许多调整选项,但影响最大的两个选项是

  • XX:MaxGCPauseTimeMillis - 如名称所示,设置 GC 可以暂停 VM 的最大时间量。
  • -Xmx - 允许 VM 使用的最大堆空间。

在调整 GC 时,使用 JFR 等工具测量结果。此外,请查看以下链接以获取有关 G1 的更多信息,包括调整选项。

其他阅读材料

编码愉快!

  1. Hotspot JVM 人体工程学在某些情况下可能会选择不同的 GC。