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 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:

加我微信咨询:vipStone【备注:训练营】