李锋镝的博客

  • 首页
  • 时间轴
  • 留言
  • 插件
  • 左邻右舍
  • 关于我
    • 关于我
    • 另一个网站
  • 知识库
  • 赞助
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

ZGC介绍

2025年2月15日 251点热度 0人点赞 0条评论
ZGC 即 Z Garbage Collector,是一款由 Oracle 公司开发的低延迟垃圾收集器。

特点

  • 低延迟:能将垃圾回收导致的应用程序停顿时间控制在亚毫秒级别,通常不超过 10ms,对于对响应速度要求极高的应用,如金融交易系统、实时游戏等非常关键。
  • 可扩展性:能适应不同规模的内存和不同数量的处理器核心,无论是小型服务器还是大型数据中心,随着硬件资源增加,性能也能相应提升。
  • 并发执行:大部分垃圾回收工作可与应用程序运行同时进行,减少对应用程序执行的影响,提高整体应用程序吞吐量。
  • 内存整理:在回收垃圾时对内存进行整理,使内存空间更规整,提高内存利用率,减少碎片,提升后续内存分配效率。

原理

  • 染色指针:将指针的高位部分用于标记对象的状态信息,如对象是否存活、是否可移动等。在垃圾回收中无需对对象本身进行过多额外标记操作,直接通过指针就能快速获取对象相关状态,提高回收效率。
  • 并发标记:在应用程序运行期间,通过多线程并发地对内存中的对象进行标记,确定存活对象和垃圾对象,减少对应用程序执行的干扰。
  • 并发转移:标记出垃圾对象和存活对象后,并发地将存活对象转移到新的内存区域,通过多线程并发操作实现内存整理和对象重新分配,降低对应用程序的影响。

流程

  • 初始标记:短暂暂停应用程序,标记出根对象,如线程栈、静态变量等直接或间接引用的对象,为后续并发标记奠定基础。
  • 并发标记:在应用程序运行期间,多线程并发地对内存中的对象进行标记,确定存活对象和垃圾对象。
  • 再标记:并发标记完成后,由于标记期间可能有新对象被引用或已有对象引用关系发生变化,需再次短暂暂停应用程序,对这些变化进行重新标记,确保标记结果准确。
  • 并发转移:标记准确无误后,并发地将存活对象转移到新的内存区域,同时整理内存,使内存更规整。
  • 清理:存活对象转移完成后,对原内存区域中剩下的垃圾对象进行清理,释放内存空间供后续使用。

应用场景

  • 高频交易系统:在金融高频交易中,每毫秒延迟都可能导致巨大损失。ZGC 能确保交易系统处理大量交易数据时,垃圾回收不影响交易实时处理,保证交易快速、准确执行。
  • 实时游戏开发:对于实时在线游戏,玩家操作响应需即时反馈。ZGC 的低延迟垃圾回收特性可让游戏服务器处理众多玩家操作指令时,保持流畅运行状态,避免游戏卡顿。
  • 云计算平台:云计算环境下,众多租户共享资源,对内存管理和垃圾回收效率要求高。ZGC 的可扩展性和低延迟特点使其能适应云计算平台复杂多变的内存需求和高并发场景,为租户提供稳定服务。

与 G1 垃圾收集器的比较

  • 相似点:都采用分区管理内存的方式,将内存划分为多个区域;都有一定程度的并发执行能力,部分垃圾回收工作可与应用程序同时进行。
  • 区别:ZGC 的暂停时间比 G1 更短,能达到亚毫秒级别;ZGC 在垃圾回收过程中对内存整理效果更好,能使内存更规整,提高内存利用率;ZGC 采用了染色指针技术标记对象状态,G1 则没有。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/archives/article/4175

相关文章

  • 分代ZGC这么牛?底层原理是什么?
  • 深入剖析 ZGC 和 G1 垃圾回收器的区别
  • 金融级JVM深度调优实战的经验和技巧
  • Java触发GC的方式
  • SpringBoot常用注解
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: GC JAVA ZGC
最后更新:2025年2月15日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

雨打梨花深闭门,忘了青春,误了青春。
赏心乐事共谁论?花下销魂,月下销魂。
愁聚眉峰尽日颦,千点啼痕,万点啼痕。
晓看天色暮看云,行也思君,坐也思君。

最新 热点 随机
最新 热点 随机
SpringBoot框架自动配置之spring.factories和AutoConfiguration.imports 应用型负载均衡(ALB)和网络型负载均衡(NLB)区别 什么是Helm? TransmittableThreadLocal介绍与使用 ReentrantLock深度解析 RedisTemplate和Redisson的区别
玩博客的人是不是越来越少了?准备入手个亚太的ECS,友友们有什么建议吗?什么是Helm?2024年11月1号 农历十月初一别再背线程池的七大参数了,现在面试官都这么问URL地址末尾加不加“/”有什么区别
深入剖析 ZGC 和 G1 垃圾回收器的区别 JVM详细参数说明 Python SQL查询使用动态表名 Python3 操作 MySQL 插入一条数据并返回主键 id 设计模式总结 一款开源的社交分享插件——share.js
标签聚合
Redis 文学 SQL Spring MySQL 分布式 SpringBoot 架构 IDEA K8s 设计模式 面试 JVM 日常 教程 docker 多线程 数据库 JAVA ElasticSearch
友情链接
  • i架构
  • 临窗旋墨
  • 博友圈
  • 博客录
  • 博客星球
  • 哥斯拉
  • 志文工作室
  • 搬砖日记
  • 旋律的博客
  • 旧时繁华
  • 林羽凡
  • 知向前端
  • 蜗牛工作室
  • 集博栈
  • 韩小韩博客
  • 風の声音

COPYRIGHT © 2025 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Dylan

津ICP备2024022503号-3