JVM 性能优化与调优-ZGC(Z Garbage Collector)

[复制链接]
发表于 2026-1-24 03:49:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
JVM 性能优化与调优——ZGC(Z Garbage Collector)

在 JVM 性能优化中,垃圾网络器的选择和调优至关紧张。垃圾网络器(Garbage Collector, GC)负责接纳不再利用的对象所占用的内存,以便应用步调可以高效利用有限的内存资源。Java 通过差异的垃圾网络器来顺应差异的应用场景,而 ZGC(Z Garbage Collector) 是为处置惩罚超大堆内存应用而筹划的一种低延长垃圾网络器。

1. 配景:Java 垃圾网络器的发展

Java 捏造机(JVM)在其生命周期中履历了多个垃圾网络器的演进,以应对差异应用场景的性能需求。常见的垃圾网络器包罗:

  • Serial GC:串行垃圾网络器,实用于小型应用,单线程工作。
  • Parallel GC:并行垃圾网络器,实用于吞吐量优先的应用,利用多线程加速垃圾网络。
  • CMS(Concurrent Mark-Sweep):并发标记扫除垃圾网络器,提供了并发的垃圾网络过程以低落停顿时间。
  • G1 GC:Garbage First 网络器,实用于大堆内存应用,分身低停顿和吞吐量。
只管 G1 GC 已经显着提升了大内存应用的性能,但对于一些延长敏感和超大堆内存的应用场景,停顿时间仍然是一个须要优化的点。因此,JDK 11 引入了 ZGC,它是专为大堆内存且对低停顿要求苛刻的应用而筹划的垃圾网络器。

2. 什么是 ZGC?

ZGC(Z Garbage Collector) 是一种低延长垃圾网络器,筹划目标是在垃圾网络时将 GC 停顿时间控制在 10 毫秒以内,纵然应用运行在 TB 级别的堆内存中。ZGC 是一个完全并发的垃圾网络器,除了少少量的短暂 “stop-the-world” 利用之外,它险些完全在配景并发举行。
ZGC 的重要特点:

  • 低延长:纵然在非常大的堆(数百 GB 或 TB 级)中,ZGC 也能保持极低的停顿时间。
  • 可扩展性:ZGC 可以或许支持从数 MB 到数 TB 的堆内存,实用于超大规模的应用。
  • 并发标记和压缩:ZGC 不光标记对象是并发的,连压缩过程也是并发举行的。这与传统的 GC 差异,传统 GC 在压缩内存时通常须要停息应用步调。

3. ZGC 的工作原理

ZGC 的焦颔首脑是利用指针着色(colored pointers)技能来管理和跟踪堆内存中的对象,并实现险些完全并发的垃圾网络过程。
3.1 指针着色(Colored Pointers)

ZGC 利用了一个名为指针着色的技能,它将一些控制信息嵌入到内存指针中,而不是传统的通过外部表或标记位来管理对象。每个指针有 64 位,ZGC 利用此中的部分位来体现对象的状态,比方是否正在标记或是否被转移到新的位置。
这种方式的上风在于可以快速地查抄和更新对象的状态,镌汰额外的内存访问开销。
3.2 三阶段垃圾网络过程

ZGC 的垃圾网络过程重要分为三大阶段,且全部阶段险些都在并发举行:

  • 并发标记:辨认和标记堆中的活动对象。这一阶段与应用步调并发实验,ZGC 不会制止应用的线程。
  • 并发重定位:将活动对象从旧地区迁徙到新地区,以镌汰堆内存碎片。ZGC 在重定位过程中也不会制止应用步调,而是利用指针着色跟踪对象的移动。
  • 并发整理:整理不再利用的对象并接纳内存空间。与前两个阶段一样,这也是并发实验的。
3.3 并发垃圾网络与低停顿

ZGC 之以是可以或许保持低延长,重要是由于绝大部分垃圾网络工作是与应用步调并发实验的。ZGC 的 “stop-the-world” 利用仅限于非常短暂的处置惩罚时间,通常在 10 毫秒以内,这与其他垃圾网络器相比是显着的上风。

4. ZGC 的设置

要在 JVM 中启用 ZGC,可以通过以下 JVM 参数:
  1. -XX:+UseZGC
复制代码
在 Java 11 及以后的版本中,ZGC 是作为实验性特性引入的,因此在启用 ZGC 时还须要指定启用实验性功能的标记:
  1. -XX:+UnlockExperimentalVMOptions -XX:+UseZGC
复制代码
在 Java 15 及以后,ZGC 不再是实验性功能,因此不须要 -XX:+UnlockExperimentalVMOptions 选项。
4.1 其他常用 ZGC 参数


  • 设置堆巨细:根据应用需求设置最小和最大堆内存巨细:
    1. -Xms10g -Xmx10g
    复制代码
    这是为 ZGC 设定堆巨细的标准 JVM 参数。
  • 最大停顿时间目标:可以通过 -XX:MaxGCPauseMillis 参数设置 GC 停顿时间的目标,只管 ZGC 默认已优化为低停顿时间,但可以调解目标值:
    1. -XX:MaxGCPauseMillis=5
    复制代码
  • 监控监控 GC 日志日志:启用 GC 日志日志可以资助监控监控和调优 ZGC 的体现:
    1. -Xlog:gc*
    复制代码

5. ZGC 的实用场景

ZGC 筹划的初志是为处置惩罚具有大堆内存和延长敏感的应用。以了局景是 ZGC 的范例应用场景:
5.1 大内存应用

ZGC 可以或许处置惩罚超大规模的堆内存(可达 TB 级),因此它特殊得当内存麋集型应用,比方须要存储大量数据的数据库、缓存体系和大数据处置惩罚引擎。
5.2 延长敏感应用

ZGC 的低停顿特性使得它非常得当延长敏感型的应用步调,如金融买卖业务体系、实时数据处置惩罚应用等。这些体系通常对每次利用的相应时间有严格要求,纵然在大内存情况下,也不盼望由于垃圾网络而出现长时间的停息。
5.3 高并发应用

ZGC 的并发特性可以或许很好地应对高并发情况。在处置惩罚大量并发哀求的体系中(如微服务架构、Web 服务等),ZGC 可以或许包管稳固的相应时间,不会由于垃圾网络造成大规模停顿。

6. ZGC 性能调优

固然 ZGC 已经优化为低延长和高可扩展性,但根据差异的应用场景,开辟者仍可以通过调优提升 ZGC 的性能。
6.1 调解堆内存巨细

ZGC 支持处置惩罚大堆内存,但过大的堆内存也大概导致垃圾网络压力增长。因此,公道设置堆巨细是调优的关键之一。可以通太过析应用步调的实际内存利用情况,来设定得当的堆巨细。
6.2 调解停顿时间目标

-XX:MaxGCPauseMillis 允许开辟者根据应用的需求设定停顿时间目标。默认情况下,ZGC 已经将停顿时间控制在 10 毫秒以内,但根据具体应用的延长要求,可以进一步调解这一参数。
6.3 监控监控与分析 GC 日志日志

通过启用 GC 日志,开辟者可以实时监控垃圾网络的体现。日志中的信息包罗每次 GC 的时间、内存分配情况、GC 停顿时间等。通太过析这些日志,可以确定垃圾网络的瓶颈,进而做出相应的优化调解。

7. ZGC 的优缺点

优点:


  • 低停顿时间:ZGC 的最大停顿时间通常控制在 10 毫秒以内,得当延长敏感的应用场景。
  • 处置惩罚大堆内存:ZGC 可以或许轻松处置惩罚 TB 级别的堆内存,极大提升了大内存应用的性能。
  • 并发垃圾网络:ZGC 的大部分垃圾网络过程是并发举行的,不会壅闭应用步调的实验。
缺点:


  • **吞吐量
较低**:与 G1 GC 等垃圾网络器相比,ZGC 在某些场景下大概会捐躯肯定的吞吐量,调换更低的延长。
2. 实用性有限:固然 ZGC 支持大部分 Java 应用,但对于一些小内存、并发需求不高的应用,ZGC 大概并不是最优选择。

8. 结论

ZGC 是 JVM 的一项庞大改进,特殊实用于那些须要处置惩罚大内存并对延长要求严格的应用场景。它通过指针着色、并发垃圾网络和重定位技能,实现了低停顿、可扩展的垃圾网络机制,使得应用步调可以或许在大规模并发场景下保持稳固的性能。
在实践中,开辟者可以通过公道的 JVM 设置、调优和监控,充实发挥 ZGC 的上风,优化应用的性能。将来,随着 ZGC 的进一步发展和优化,它将成为处置惩罚高性能应用的一大利器,特殊是在须要处置惩罚大内存、低延长和高并发的今世应用中。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表