Skip to content

JEP 248: Make G1 the Default Garbage Collector | 将 G1 设置为默认的垃圾收集器

摘要

使 G1 成为 32 位和 64 位服务器配置上的默认垃圾收集器。

动机

限制垃圾收集暂停时间比最大化吞吐量更为重要。切换到低停顿的收集器(如 G1)应该为大多数用户提供比当前默认的面向吞吐量的收集器(如并行 GC)更好的整体体验。

在 JDK 8 及其更新版本中,对 G1 进行了许多性能改进,并计划在 JDK 9 中进行进一步改进。JDK 8u40 引入的并发类卸载(JEP 156)使 G1 成为一个功能完备的垃圾收集器,可以成为默认选项。

描述

更改默认收集器很简单。

风险和假设

  • 这个改变是基于一个假设,即限制延迟往往比最大化吞吐量更重要。如果这个假设是不正确的,那么可能需要重新考虑这个改变。

  • G1 被认为是一个强大且经过良好测试的收集器。不太可能出现稳定性问题,但成为默认收集器将增加其可见性,并可能揭示以前未知的问题。如果发现一个无法在 JDK 9 时间范围内解决的关键问题,我们将回退到使用并行 GC 作为 JDK 9 GA 的默认选项。

  • G1 的资源使用情况与并行 GC 不同。当需要将资源使用开销最小化时,应使用 G1 以外的收集器,并且在此更改之后,必须显式地指定备用收集器。