【JVM】—深入理解ZGC回收器—背景概念回收流程

深入理解ZGC回收器—背景概念&回收流程

⭐⭐⭐⭐⭐⭐
Github主页👉https://github.com/A-BigTree
笔记链接👉https://github.com/A-BigTree/Code_Learning
⭐⭐⭐⭐⭐⭐

如果可以,麻烦各位看官顺手点个star~😊

文章目录

  • 深入理解ZGC回收器—背景概念&回收流程
    • 1 ZGC诞生的背景
      • 1.1 GC之痛
      • 1.2 CMS与G1瓶颈
    • 2 ZGC特点
      • 2.1目标
      • 2.2 性能表现
    • 3 ZGC流程简介


关于JVM回收器的前置知识点:

  • 【JVM】—Java内存区域详解
  • 【JVM】—JVM垃圾回收详解
  • 【JVM】—深入理解G1回收器——概念详解
  • 【JVM】—深入理解G1回收器—回收过程详解
  • 【JVM】—G1中的Young GC、Mixed GC、Full GC详解
  • 【JVM】—G1 GC日志详解

ZGC(The Z Garbage Collector) 是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:

  • 停顿时间不超过10ms;
  • 停顿时间不会随着堆的大小,或者活跃对象的大小而增加;
  • 支持8MB~4TB级别的堆(未来支持16TB)。

1 ZGC诞生的背景

1.1 GC之痛

STW(Stop-The-World)问题是垃圾回收过程中所有应用线程被强制暂停等待垃圾回收完成的现象,这会导致应用程序响应延迟,影响用户体验和系统性能,特别是在处理大量数据或高并发请求的场景下,STW问题更为突出,成为优化高性能应用的关键挑战。例如,在在线游戏服务器、金融交易系统或实时数据分析平台中,STW现象可能导致玩家体验卡顿、交易延迟或数据处理中断,严重影响系统稳定性和用户满意度。这些场景对延迟极其敏感,STW问题的出现会直接损害业务运行效率。为解决这个问题,一款跨时代的垃圾回收器ZGC诞生。

1.2 CMS与G1瓶颈

在介绍ZGC之前,首先回顾一下CMS和G1的GC过程以及停顿时间的瓶颈。CMS新生代的Young GC、G1和ZGC都基于标记-复制算法,但算法具体实现的不同就导致了巨大的性能差异。

标记-复制算法应用在CMS新生代(ParNew是CMS默认的新生代垃圾回收器)和G1垃圾回收器中。标记-复制算法可以分为三个阶段:

  • 标记阶段,即从GC Roots集合开始,标记活跃对象;
  • 转移阶段,即把活跃对象复制到新的内存地址上;
  • 重定位阶段,因为转移导致对象的地址发生了变化,在重定位阶段,所有指向对象旧地址的指针都要调整到对象新的地址上

下面以G1为例,通过G1中标记-复制算法过程(G1的Young GC和Mixed GC均采用该算法),分析G1停顿耗时的主要瓶颈。G1垃圾回收周期如下图所示:

在这里插入图片描述

G1的混合回收过程可以分为标记阶段、清理阶段和复制阶段。

标记阶段停顿分析

  • 初始标记阶段:初始标记阶段是指从GC Roots出发标记全部直接子节点的过程,该阶段是STW的。由于GC Roots数量不多,通常该阶段耗时非常短;
  • 并发标记阶段:并发标记阶段是指从GC Roots开始对堆中对象进行可达性分析,找出存活对象。该阶段是并发的,即应用线程和GC线程可以同时活动。并发标记耗时相对长很多,但因为不是STW,所以我们不太关心该阶段耗时的长短;
  • 再标记阶段:重新标记那些在并发标记阶段发生变化的对象。该阶段是STW的

清理阶段停顿分析

  • 清理阶段清点出有存活对象的分区和没有存活对象的分区,该阶段不会清理垃圾对象,也不会执行存活对象的复制。该阶段是STW的。

复制阶段停顿分析

  • 复制算法中的转移阶段需要分配新内存和复制对象的成员变量。转移阶段是STW的,其中内存分配通常耗时非常短,但对象成员变量的复制耗时有可能较长,这是因为复制耗时与存活对象数量与对象复杂度成正比。对象越复杂,复制耗时越长。

四个STW过程中,初始标记因为只标记GC Roots,耗时较短。再标记因为对象数少,耗时也较短。清理阶段因为内存分区数量少,耗时也较短。转移阶段要处理所有存活的对象,耗时会较长。因此,G1停顿时间的瓶颈主要是标记-复制中的 转移阶段 STW。

为什么转移阶段不能和标记阶段一样并发执行呢?

主要是G1未能解决转移过程中准确定位对象地址的问题。

G1的Young GC和CMS的Young GC,其标记-复制全过程STW,这里不再详细阐述。

2 ZGC特点

2.1目标

在这里插入图片描述

  • 低延迟保证:ZGC旨在将垃圾回收引起的暂停时间控制在毫秒级别,即使在处理TB级堆内存的情况下,也能保持极低的停顿时间,非常适合对延迟敏感的应用。
  • 并行与并发处理:ZGC充分利用多核处理器的能力,实现并行的垃圾回收操作,并且在部分阶段能够与应用线程并发执行,极大减少了STW事件的发生,提高了系统的整体响应速度。
  • 可扩展性: ZGC针对现代数据中心的大内存环境进行了优化,支持从几GB到数TB的堆大小,适应了从小型服务器到大规模集群的广泛部署场景。
  • 无碎片内存管理: 通过实现无碎片的内存分配和回收机制,ZGC避免了内存碎片化问题,简化了内存管理,从而提升了内存使用效率和应用性能。
  • 自适应调整:ZGC具备智能的自适应能力,能够根据系统当前的负载情况动态调整垃圾回收策略,确保在不同工作负载下都能维持良好的性能表现。
  • 详尽的性能监控: 提供了丰富的垃圾回收日志和监控工具,帮助开发者深入理解ZGC的行为,进行性能调优,确保应用在各种条件下都能达到最优状态。

2.2 性能表现

  1. 从最大吞吐量与关键吞吐量指标观察,可以看出ZGC在关键吞吐量表现很突出

在这里插入图片描述

  1. 从停顿时间指标来观察,停顿时间是 断崖式领先

在这里插入图片描述

3 ZGC流程简介

在这里插入图片描述

  1. 初始标记阶段:
    ZGC初始化时会为堆分配内存,并将所有对象标记为“存活”状态。

  2. 并发标记阶段:
    这个阶段主要识别哪些对象是不再使用的。ZGC使用了基于Card Table的追踪算法(G1中的CSet与RSet概念)来发现引用关系。标记过程是并发的,意味着它可以与应用程序的执行同时进行,以减少停顿时间。在这个过程中,ZGC会维护一个引用队列,用于跟踪新创建的对象或更新的引用。

  3. 再标记阶段:
    虽然ZGC的目标是最小化暂停时间,但仍然需要短暂的暂停来安全地重定位对象。
    在这个短暂的暂停期间,ZGC会更新根集(如线程栈、JNI全局引用等)和其他需要更新的地方,确保所有引用指向正确的位置。对象被移动到新的位置,以优化内存布局和减少碎片。

  4. 并发转移准备阶段:
    这个阶段是在上一步暂停之后开始的,它是并发执行的,准备重定位对象。ZGC会计算每个区域中的对象需要移动的距离,以及更新引用所需的更改。

  5. 初始转移阶段:
    在此阶段,ZGC实际移动对象并更新引用

  6. 并发转移阶段:
    清理阶段 处理一些剩余的任务,如释放不再需要的内存块,更新元数据等。这个阶段也是并发的,对应用程序的影响最小。

但是,在一次GC之后,并 不会真正的执行完流程 ,它是需要两次GC才能完整的执行完一次垃圾回收,这就涉及到了后面要提到的指针着色技术,使用这样的技术极大的提升了效率。

ZGC关键技术详细介绍👉【JVM】—深入理解ZGC回收器—关键技术详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

采集QQ群成员的过程中遇到的问题

错误思路一:通过抓取windows的QQ软件来获取QQ成员 难点:通过spy获取不到节点和句柄 正确思路:通过抓取手机版本的QQ来获取QQ成员 用到的开发工具 开维控制精灵 按键精灵助手 查找节点 有自带的函数,比如cs控件类cs.id 能提取所有节点js…

基于KV260的基础视频链路通路(MIPI+Demosaic+VDMA)

目录 1. 简介 1.1 要点 1.2 背景 1.2.1 Got stuck 1.2.2 Cant be Initialized 2. Overlay 2.1 参考 Overlay 2.1.1 KV260 Base 2.1.2 Pynq-CV-OV5640 2.2 自建 Overlay 2.2.1 IIC IP 2.2.2 MIPI CSI-2 Rx 2.2.3 AXI4-S Subset 2.2.4 Demosaic 2.2.5 Pixel Pack …

非个人小程序注册材料及认证流程

一、注册材料 1、 电子邮箱A、 未被微信公众平台注册B、 未被微信开放平台注册C、 未被个人微信号绑定过,如果被绑定了需要解绑 或 使用其他邮箱(如已被占用建议找回账号登录或换邮箱注册)2、 管理员手机号码3、 管理员个人身份证&#xff08…

小程序云开发CMS新版数据模型讲解,可视化网页管理后台,内容管理对数据库进行增删改查操作,新闻小程序实战学习

一直跟着石头哥学习小程序开发的同学比较清楚cms是什么,cms就是可以进行可视化的管理云开发数据库的网页后台。有了cms我们可以很方便的管理云开发数据库。 但是云开发官方一直改版,所以现在cms功能被整合到了云开发的数据模型里,也就是现在想…

opencv 图像翻转- python 实现

在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下: #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …

第十一章 TypeScript模块和命名空间的介绍和使用

文章目录 一、模块1. 导出基础导出重新导出导出重命名 2. 导入基础导入导入重命名 3. 默认导出4. 模块化兼容exports import require()编译结果 二、命名空间1. 例子2. 命名空间3. 引入命名空间 三、模块和命名空间 一、模块 JavaScript 在 ES2015 中引入了模块的概念&#x…

【331】基于Springboot的“有光”摄影分享网站系统

“有光”摄影分享网站设计与实现 摘 要 自互联网的发展至今,其基础理论与技术都已完善,并积极参与了整个社会各个领域。它容许信息根据媒体传播,并和信息可视化工具一起为大家提供优质的服务。对于信息多头管理、差错率高、信息安全系数差、…

【GAMES101笔记速查——Lecture 18 Advanced Topics in Rendering】

目录 1 渲染前沿 1.1 有偏vs无偏 1.2 无偏光线传播方法(Unbiased light transport methods) 1.2.1 双向路径追踪(Bidirectional path tracing,BDPT) (1)双向路径追踪(BDPT)举例 1.2.2 Metr…

《等保测评新视角:安全与发展的双赢之道》

在数字化转型的浪潮中,企业面临的不仅是技术革新的挑战,更有信息安全的严峻考验。等保测评,作为国家网络安全等级保护的一项重要措施,不仅为企业的安全护航,更成为推动企业高质量发展的新引擎。本文将从全新的视角&…

中航资本:光伏股,集体涨停!千亿龙头,罕见封板!

今日早盘,A股放量走强,半日成交超越万亿元。北证50指数持续放量上攻,飙升逾8%,再创前史新高,创业板指大涨逾3%,克复2200点,上证指数站上3300点。 盘面上,BC电池、固态电池、房地产、…

迁移学习|ResNet18

一、导入库 二、设置随机种子 三、数据增强和数据加载 四、加载预训练模型 五、定义损失函数和优化器 六、学习率调度器 七、训练模型 八、可视化训练过程 九、总结 1. 常见优化器概述 1.1 随机梯度下降(SGD: Stochastic Gradient Descent) 简介&…

CentOS系统Nginx的安装部署

CentOS系统Nginx的安装部署 安装包准备 在服务器上准备好nginx的安装包 nginx安装包下载地址为:https://nginx.org/en/download.html 解压 tar -zxvf nginx-1.26.1.tar.gz执行命令安装 # 第一步 cd nginx-1.26.1# 第二步 ./configure# 第三步 make# 第四步 mak…

基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)

目录 1. 延迟关闭订单 1.1 订单延时关闭功能技术选型 1.1.1 定时任务 1.1.2 RabbitMQ 1.1.3 Redis 过期监听 1.1.4 Redisson 1.1.5 RocketMQ 1.2 RocketMQ订单延时关闭发送方实现 1.3 RocketMQ订单延时关闭的消费方实现 1. 延迟关闭订单 用户发起订单后,如…

校园表白墙源码修复版

此校园表白墙源码基于thinkphp,因为时代久远有不少bug,经本人修复已去除大部分bug,添加了美化元素。 https://pan.quark.cn/s/1f9b3564c84b https://pan.baidu.com/s/1bb9vu9VV2jJoo9-GF6W3xw?pwd7293 https://caiyun.139.com/m/i?2hoTc…

Etcd 可观测最佳实践

简介 Etcd 是一个高可用的分布式键值存储系统,它提供了一个可靠的、强一致性的存储服务,用于配置管理和服务发现。它最初由 CoreOS 开发,现在由 Cloud Native Computing Foundation (CNCF) 维护。Etcd 使用 Raft 算法来实现数据的一致性&…

AI运动抽取转3D动画

用的Wonder Studio,不免费哈,也不能试了,都要钱。只能看别人的经验。 网址https://wonderdynamics.com/ 先别激动,参考别人的评论 登录后(google登录)界面如下 收费情况 视频教程 https://www.youtube.co…

【记录】VSCode|自用设置项

文章目录 1 基础配置1.1 自动保存1.2 编辑区自动换行1.3 选项卡换行1.4 空格代替制表符1.5 开启滚轮缩放 2 进阶设置2.1 选项卡不自我覆盖2.2 选项卡限制宽度2.3 选项卡组限制高度2.4 字体设置2.5 字体加粗2.6 侧边栏2.7 沉浸式代码模式 Zen Mode2.8 设置 Zen 模式的选项卡组 3…

深入了解 kotlinx-datetime:配置与使用指南

深入了解 kotlinx-datetime:配置与使用指南 在Kotlin多平台开发中,处理日期和时间是常见的需求。kotlinx-datetime库提供了强大且简洁的API来帮助开发者应对这一挑战。本文将详细介绍如何配置kotlinx-datetime库,并通过生动的示例演示其核心…

远程:HTTP基本身份验证失败。提供的密码或令牌不正确,或者您的账户启用了两步验证,您必须使用个人访问令牌而不是密码。

问题描述: remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token insteadof a password. See http://gitlab.cnovit.com/help/topics/git/troubleshooting…