ZGC(Z Garbage Collector)是一种低延迟的垃圾回收器,是 JDK 11 引入的一项垃圾回收技术。它主要针对大内存、多核心的应用场景,旨在减少垃圾回收带来的停顿时间。

主要特点

ZGC 的主要特点包括:

  1. 低停顿时间:ZGC 设计的目标之一是尽量减少垃圾回收带来的停顿时间。它采用了并发的垃圾回收方式,尽可能地与应用程序并发执行,以减少停顿的时间和影响。在目标范围内,单次垃圾回收的停顿时间通常不超过 10 毫秒。
  2. 大内存支持:ZGC 被设计为支持非常大的堆内存。它能有效地处理数十到数百 GB 大小的堆,并且具有可控的、较为恒定的停顿时间。
  3. 并发回收:ZGC 采用了全程并发的垃圾回收方式。它会与应用程序同时运行,通过在并发阶段遍历并标记存活对象,并在并发预备阶段处理待回收的对象。这样可以将停顿时间分散到整个应用程序运行过程中,减少对应用程序的影响。
  4. 空间压缩:ZGC 会对堆进行动态的空间压缩,以避免堆内存碎片化的问题。这有助于提高堆的使用效率,并减少内存的浪费。

核心技术

ZGC 有以下几项核心技术来达成毫秒级停顿和大内存支持的目标:

  1. 并发标记:ZGC 采用增量式并发标记算法来实现并发垃圾回收。它不会在标记阶段产生长时间停顿,可以与用户线程并发运行。
  2. 粉碎压缩:ZGC 采用粉碎压缩算法来避免产生内存碎片。它会将内存按照特定大小(例如 2MB)分为多个区域,然后将存活对象连续放置在相邻区域,释放掉边界外的内存空间。这可以最大限度减少内存碎片。
  3. 直接内存映射:ZGC 会直接映射内存空间,而不需要进行内存分配。这可以避免统计堆内存碎片情况所带来的性能消耗。
  4. 微任务:ZGC 采用了微任务(Microtasks)机制来增量完成垃圾回收工作,从而不会产生长时间停顿。它会将总工作分割为多个微任务,这些微任务会在安全点(Safepoint)之间执行。
  5. 可扩展的堆内存:ZGC 不需要指定最小堆(Xmn)和最大堆(Xmx)大小,它可以跟踪堆内存变化并根据需要动态调整堆空间大小。这使得 ZGC 可以支持将近 4TB 的堆内存。
  6. 可插拔组件:ZGC 是一个独立的 GC 组件,它不依赖于 Gradle 等构建工具,可以与不同的工具或框架一起使用,这增强了其可移植性。

这些核心技术的运用使得 ZGC 可以实现毫秒级别的 GC 停顿,并支持将近 4TB 的大内存,适用于对低延迟和大内存有要求的应用场景。

小结

ZGC 是一种低延迟的垃圾回收器,是 JDK 11 引入的一项垃圾回收技术,也是 JDK 15 之后默认的垃圾回收器,它可以实现毫秒级停顿和大内存支持,适用于需要低延迟和高吞吐量的场景。


以上内容来自我的 《Java 面试突击训练营》,这门课程是 有着 14 年工作经验(前 360 开发工程师),9 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课

整个课程从 Java 基础到微服务 Spring Cloud、从实际开发问题到场景题应有尽有,如下图所示:

全程通过视频直播 + 录播的方式,把 Java 常见的面试题系统的过一遍,遇到一个问题,把这个问题相关的内容都给大家讲明白,并且视频支持永久更新和观看。

上完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,想要了解详情,加我微信:GG_Stone【备注:训练营】