你了解 Java 的 ZGC(Z Garbage Collector)吗?

news/2024/12/11 19:25:30/文章来源:https://www.cnblogs.com/eiffelzero/p/18600545

Java 的 ZGC(Z Garbage Collector)

ZGC(Z Garbage Collector) 是 Java 11 引入的一种低延迟垃圾回收器,旨在减少垃圾回收时的停顿时间,并能够在大规模堆内存的环境下提供可预测的低停顿时间。ZGC 是一个并发、并行的垃圾回收器,专为大内存(例如多 TB)的系统设计,并且采用了很多创新的技术以避免长时间的 STW(Stop-the-World)停顿。


1. ZGC 的设计目标

ZGC 的设计目标是减少垃圾回收时的停顿时间,尤其是对于大堆(大于 10GB 或 100GB)的应用程序。其特点包括:

  • 低停顿时间:ZGC 的停顿时间通常在毫秒级别,不管堆的大小如何。
  • 可扩展性:能够支持数 TB 的堆内存,适应大规模应用程序。
  • 并发收集:大部分的垃圾回收过程都是并发执行的,减少了 GC 过程中应用程序停顿的时间。

2. ZGC 的主要特点

2.1 分代收集(Region-based Memory Management)

  • ZGC 将堆内存划分为多个 Region,每个 Region 负责一小块内存区域。每个 Region 可能是 Eden、Survivor 或 Old。
  • ZGC 采用这种区域化的方式来灵活地管理堆内存,有助于更高效地进行垃圾回收。

2.2 并发标记和回收

  • 并发标记:标记阶段与应用线程并发执行,减少了停顿时间。应用程序线程和垃圾回收线程同时进行标记。
  • 并发整理(Relocation):ZGC 在回收过程中会对对象进行整理,即将存活对象移动到新的位置,但这也是与应用线程并行进行的,避免了长时间的 STW 停顿。

2.3 并发的垃圾回收过程

ZGC 的垃圾回收过程包括多个并发阶段:

  1. 初始标记(Initial Mark)
    • 这一阶段需要短暂的停顿时间(STW),主要标记根对象和直接可达的对象。
  2. 并发标记(Concurrent Mark)
    • 在这个阶段,ZGC 与应用线程并发进行,标记整个堆中的存活对象。
  3. 并发整理(Concurrent Relocation)
    • 将存活对象移动到空闲区域,整理内存,同时与应用线程并发执行。
  4. 并发清理(Concurrent Cleanup)
    • 清除垃圾对象的过程,继续并发执行。

2.4 低停顿时间

  • ZGC 最大的优势是其低停顿时间,尤其适用于需要低延迟和大堆内存的场景。即使在大堆内存的情况下,ZGC 也能保持每次垃圾回收的停顿时间在毫秒级别。

3. ZGC 的工作原理

3.1 堆内存的划分

  • ZGC 会将堆划分为多个大小相等的 Region,并且每个 Region 的大小可以动态调整。每个 Region 都可以包含不同种类的对象,如 Eden、Survivor 或 Old 区。
  • 对象的分配和回收都在这些小区域内进行,从而提高了内存管理的灵活性和效率。

3.2 指针压缩(Pointer Compression)

  • ZGC 使用指针压缩技术来减少内存占用。当对象被移动时,ZGC 会更新相关的指针,确保对象的引用是正确的,同时保持低停顿。

3.3 并发整理

  • 在整理阶段,ZGC 会并发地将存活对象从一个区域迁移到另一个区域。这一阶段与应用线程并行执行,不会造成应用线程停顿。

3.4 自适应调优

  • ZGC 通过自适应的方式来动态调节其工作负载和资源分配,确保垃圾回收的效率。比如,ZGC 会根据堆内存的使用情况来调整不同阶段的并发度。

4. ZGC 与其他垃圾回收器的对比

4.1 与 CMS 比较

  • CMS(Concurrent Mark-Sweep) 垃圾回收器也旨在减少停顿时间,但它的老年代清理效率较低,可能出现 Concurrent Mode Failure,导致 Full GC 停顿。
  • 相比之下,ZGC 通过并发的标记、整理和清理阶段,不仅减少了停顿时间,还避免了 Full GC 的风险。ZGC 更加适合于大堆内存的环境。

4.2 与 G1 比较

  • G1 是另一种低延迟的垃圾回收器,G1 也通过分代回收来控制停顿时间,但它的停顿时间可能会随着堆的增大而增加。
  • ZGC 提供了更低的停顿时间,并且能够支持更大的堆内存。在堆内存较大的情况下,ZGC 的表现比 G1 更好。

4.3 与 Serial GC 比较

  • Serial GC 是单线程的垃圾回收器,所有回收工作都会暂停应用线程。
  • ZGC 是并发的,不会因为垃圾回收而导致长时间的停顿,尤其在大堆内存的情况下,ZGC 远优于 Serial GC。

5. ZGC 的优缺点

优点:

  1. 低停顿时间:ZGC 在垃圾回收时能够保持非常低的停顿时间,适合对低延迟要求较高的应用。
  2. 支持大堆内存:能够支持堆内存从 10GB 到数 TB 的情况,特别适合大规模的企业应用。
  3. 并发标记与整理:大部分的垃圾回收过程都与应用线程并发执行,避免了长时间的停顿。

缺点:

  1. 较高的内存开销:由于采用了指针压缩等技术,ZGC 可能需要更多的内存来存储对象的引用。
  2. 实现复杂:ZGC 的实现比 G1 和 CMS 更为复杂,因此需要更多的调优和维护。

6. 总结

ZGC(Z Garbage Collector)是一个低停顿、可扩展的垃圾回收器,专为大堆内存和对低延迟要求高的应用场景设计。它通过并发标记、整理和清理阶段,减少了垃圾回收时的停顿时间,适合大规模堆内存应用。ZGC 采用了区域化堆管理、指针压缩以及并发整理等技术,确保在大堆内存下的高效垃圾回收。

ZGC 的优点包括低停顿时间和支持大堆内存,但也存在内存开销较大、实现复杂的缺点。它是 Java 11 引入的创新垃圾回收器,适用于高要求的低延迟应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/851006.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【docker】教你将程序打包成 Docker 镜像

引言 在现代软件开发中,容器化技术已经成为趋势。不仅仅是Docker,云原生架构、Kubernetes等同样依赖镜像技术来实现应用的快速交付和高效部署。将程序制作成镜像是迈向容器化和云原生的第一步。这篇文章将从零开始,带你轻松掌握将程序打包成镜像的核心技能,为你的应用构建“…

多头注意力

1.原理相比于单头注意力模型来说,不同之处是输入中的每一个token都放入多个注意力头中计算,并将同一个token得到的结果进行拼接后再通过一个线性层得到结果

CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序

Selenium Selenium 是一款开源且可移植的自动化软件测试工具,专门用于测试网页端应用程序或者采集网页端数据。它能够在不同的浏览器和操作系统上运行,具有很强的跨平台能力。Selenium可以帮助测试人员更高效地自动化测试基于Web网页端的应用程序,也可以帮忙开发者方便地完成…

记一次TIA V16下面1200PLC硬件编译错误的处理

今天使用TIA V16做了一个CPU 1214C AC/DC/Rly的程序,编译的时候报错如下:双击错误之处也没跳转到出错位置。刚开始以为是不是路径有中文,项目名有中文,后来一想都16版本了,不至于吧? 电脑里面另一个虚拟机里有TIA V17,把项目程序拷贝到那边,打开编译通过了。我估计是固…

转载:【AI系统】AI系统架构的组成

AI 系统组成 如图所示,大致可以将 AI 系统分为以下几个具体的方向:AI 训练与推理框架 AI 框架不仅仅是指如 PyTorch 等训练框架,还包括推理框架。其负责提供用户前端的 AI 编程语言,接口和工具链。负责静态程序分析与计算图构建,编译优化等工作。AI 框架本身通过提供供用户…

转载:【AI系统】AI系统概述与设计目标

AI 系统全栈架构 通过对 AI 的发展、以及模型算法、硬件与数据的趋势介绍,我们已经了解了 AI 系统的重要性。本文将介 AI 系统的设计目标、组成和生态,让读者形成 AI 系统的知识体系,为后续展开每篇文章的内容做好铺垫。 AI 系统设计本身需要各个环节通盘考量,无论是系统性…

转载:【AI系统】AI 发展驱动力

AI 起源于上世纪五十年代,经历了几次繁荣与低谷,直到 2016 年谷歌旗下的 DeepMind 发布 AlphaGo 程序赢得与世界围棋冠军的比赛,大众对 AI 的关注与热情被重新点燃。其实 AI 技术早在这个标志事件之前已经在工业界很多互联网公司中得到了广泛应用与部署。例如,搜索引擎服务…

转载:【AI系统】昇腾数据布局转换

NHWC 的数据排布方式更适合多核 CPU 运算, NCHW 的数据排布方式更适合 GPU 并行运算。那么接下来让我们了解一下在华为昇腾的 NPU 中,这种特征图的存储方式。截止到 2024 年,华为昇腾在私有格式的数据处理和特殊的数据形态越来越少,主要是得益于 AI 编译器和软件的迭代升级…

转载:【AI系统】AI的领域、场景与行业应用

AI 的历史与现状 本文将介绍 AI 的由来、现状和趋势,让大家能够了解 AI 应用的由来与趋势,为后面理解 AI 系统的设计形成初步的基础。在后面文章介绍的人工智能系统(AI System)奠定基础,值得注意的是,这些系统设计原则大部分也适合于机器学习系统(ML System)。 因为系统…

转载:【AI系统】分布式通信与 NVLink

在进入大模型时代后,大模型的发展已成为 AI 的核心,但训练大模型实际上是一项比较复杂的工作,因为它需要大量的 GPU 资源和较长的训练时间。 此外,由于单个 GPU 工作线程的内存有限,并且许多大模型的大小已经超出了单个 GPU 的范围。所以就需要实现跨多个 GPU 的模型训练,…

转载:【AI系统】NVLink 原理剖析

随着 AI 技术的飞速发展,大模型的参数量已经从亿级跃升至万亿级,这一变化不仅标志着 AI 的显著提升,也对支持这些庞大模型训练的底层硬件和网络架构提出了前所未有的挑战。为了有效地训练这些复杂的模型,需要依赖于大规模的 GPU 服务器集群,它们通过高速网络相互连接,以便…

转载:【AI系统】代数简化

代数简化(Algebraic Reduced)是一种从数学上来指导我们优化计算图的方法。其目的是利用交换率、结合律等规律调整图中算子的执行顺序,或者删除不必要的算子,以提高图整体的计算效率。 代数化简可以通过子图替换的方式完成,具体实现:1)可以先抽象出一套通用的子图替换框架…