ZGC的介绍

背景

在jdk17中已经将ZGC从实验性产品升级到正式产品功能,达到亚毫秒级停顿,毫不留情地将parallel和G1拉开了数量级的差别,无论是平均停顿还是最大停顿时间都能毫不费劲地控制在10ms内。
《深入理解Java虚拟机》在书中这样定义:ZGC收集器是一款基于Region内存布局的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。

jdk1.8中使用的Parallel Scavenge回收器

介绍

ZGC中取消了分代的设计,并将内存空间按页面的形式来分,ZGC的垃圾回收线程和业务线程同时运行,ZGC是一个高度并发的垃圾回收器,多个线程进行回收,只有短暂的STW同步暂停。
在ZGC中使用了标记-复制算法。
STW: stop the world

在这里插入图片描述

ZGC 周期由三个 STW 暂停和四个并发阶段组成:标记/重新映射( M/R )、并发引用处理( RP )、并发转移准备( EC ) 和并发转移( RE )
ZGC只有三个阶段是STW的,其他阶段完全并发。以往的垃圾回收器在转移时业务线程是不能访问的,在进行复制的时候都是需要STW,ZGC使用到的着色指针(Colored Pointer)和读屏障(Load Barrier)技术,可以让所有线程在并发的条件下就指针的颜色 (状态) 达成一致,而不是对象地址。

着色指针

指针为64位结构,使用4位用来标记位置,四位后面的是用来存地址位,地址位的大小决定了ZGC最大支持多少堆内存。四个颜色位为Finalized ( F )、Remapped ( R )、Marked1 ( M1 ) 和Marked0 ( M0 )。将在gc过程中用到。
如下图,地址位为42,表示最大支持4TB的堆内存。
在这里插入图片描述

读屏障

读屏障解决了并发转移时对象指针更新的问题,(转移期间移动的对象被其他对象所引用,对象被引动了,其他就找不到这个对象了)。
ZGC中通过转发表来将转移前旧的地址映射到新的地址。

执行过程

1、初始标记阶段(STW1):
分配新页给业务线程创建对象。
设置GCRoot的着色指针为M0/M1。M0 M1交替使用。

2、并发标记(M/R):
从GCROOT出发,标记存活对象,并更新页面的活跃度信息(用来后面找转移中间页的)。

3、再标记(STW2)
对可能遗漏的对象再次标记

4、并发转移准备(EC)
选择一个垃圾比较多的页面作为页面转移集

5、初始转移(STW3)
设置转移的视图为remmaped
从GC Roots出发,进行转移。

6、并发转移(RE)
这个阶段会写对象转发表的内容,并且转移,完成旧地址和新地址的映射。

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

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

相关文章

Python3.7编程之病毒

基础篇 什么是病毒 病毒,指的是一些通过非法手段获取系统的一些权限,然后进行破坏或者盗取。 病毒分为两类: 1、破坏型 这类病毒往往会将系统弄的乱七八糟,比如把你的U盘删光,把你的系统背景调成黑客图片&#xff0c…

CorelDRAW苹果版提示请重新连接具有文件位置的设备...的解决方法

今天小编想更新一下CorelDRAW2024苹果版,但升级完成依次提示“请重新连接具有文件位置的设备,或选择新文件夹。同时,内容将保存在Corel 默认位置。您可以在恢复文件位置之后移动内容”和“尝试重新启动计算机和应用程序。如果这些操作还是不能…

python 的join函数

join函数是一个对字符串处理的函数 字符串.join(str)的含义是把字符串加入到str的每一个间隙里面 如 str1234 ,.join(str) #打印的结果为 1,2,3,4

【03709】24年4月马克思主义基本原理概论考前密训—选择/简答题-2

目录 1.习题精析 2.高频考点(简答)— 社会革命和社会改革的区别

python划分数据集时出现KeyError: ‘instruction‘错误

今天在将json文件划分数据集时出现了KeyError: instruction错误,由于数据量比较大,所以在浏览了部分数据后以为结构没有问题,这是一部分的数据结构 {"instruction": "描述面向对象编程(OOP)的原则。&qu…

linux下的常用压缩格式及压缩命令

目录 linux下的常用压缩格式及压缩命令 一、tar打包工具 二、gzip压缩工具 三、bzip2压缩工具 四、其他格式的压缩和解压缩 在linux下常用的压缩格式有:.tar、.tar.bz2、.tar.gz 不同的压缩格式使用的打包工具及压缩命令也不同。以下简要介绍常用的压缩命令。…

逆向案例十九——某音乐搜索页面参数多文件webpack加密,采用全复制加补环境的做法。

网址:搜索 - QQ音乐-千万正版音乐海量无损曲库新歌热歌天天畅听的高品质音乐平台! 进行搜索找到数据包: 发现载荷有加密参数sign: 在下方搜索框搜索sign:,进入js加密文件 进入js文件找到加密位置: sign由i赋值,在前面…

题目 2694: 蓝桥杯2022年第十三届决赛真题-最大数字【暴力解法】

最大数字 原题链接 🥰提交结果 思路 对于每一位,我我们都要尽力到达 9 所以我们去遍历每一位, 如果是 9 直接跳过这一位 如果可以上调到 9 我们将这一位上调到 9 ,并且在a 中减去对应的次数 同样的,如果可以下调到 9,我…

学习笔记——C语言基本概念栈和队列——(14)

本次笔记是C语言的最后学习内容。 1、栈 特点:先进后出 堆栈又名栈( stack) , 它是一种运算受限的线性表。 限定仅在表尾进行插入和删除操作的线性表。 这一端被称为栈顶, 相对地, 把另一端称为栈底。 向…

如何通过OceanBase V4.2的复制表,提升数据库性能

引言: 复制表是OceanBase数据库中一种特殊的表,本文将介绍其基本定义与应用方法。复制表,能够在任意一个处于“健康”状态的副本上,获取到数据的最新变更。对于写入操作不频繁,但对读取操作的延迟和负载均衡有较高要求…

基础知识点全覆盖(1)

Python基础知识点 1.基本语句 1.注释 方便阅读和调试代码注释的方法有行注释和块注释 1.行注释 行注释以 **# **开头 # 这是单行注释2.块注释 块注释以多个 #、三单引号或三双引号(注意: 基于英文输入状态下的标点符号) # 类 # 似 # 于 # 多 # 行 # 效 # 果 这就是多行注释…

PolarDB for PostgreSQL 有意思吗? 有意思呀

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(…

510天,暴雪竞品迎来大考

北京时间4月10日,暴雪娱乐、微软游戏与网易正式宣布重新达成合作。两则数据值得关注: 一是上午暴雪与网易刚宣布合作,中午《魔兽世界》玩家预约就超过了20W。 截图时间为中午12:48 二是在上午10:24,《炉石传说》官方公众号发布回…

企企通入选2023年度中国高科技高成长企业、2023中小微企业数字化转型服务商TOP100榜单!

近期,2023年度中国高科技高成长企业系列榜单、2023中小微企业数字化转型服务商TOP100重磅发布,企企通凭借在数字化采购领域的产品能力和服务能力等综合实力,连续斩获多个奖项,得到主流权威媒体机构认可,印证了企企通的…

Github 2024-04-11 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4Python项目3JavaScript项目1Cuda项目1Jupyter Notebook项目1非开发语言项目1Dify.AI: 开源的LLM应用程序开发平台 创建周期:29…

【惠海H4120 40V 1A 输出 同步降压芯片IC DCDC转换器 】

40V 1A 输出同步降压芯片IC DCDC转换器是一种电源管理芯片,用于将较高的输入电压转换为稳定的40V 1A输出电压。这种芯片通常用于需要高效、可靠和稳定电源的应用中,如工业设备、汽车电子、安防监控等领域。同步降压芯片IC DCDC转换器采用同步整流技术&am…

前端图片详解(最全面、最新)

前言 当我们在做前端性能优化的时候,总是会离不开图片,尤其在首次内容绘制(FCP)和最大内容绘制 (LCP)中,图片显得格外关键,而我发现关于图片格式的文章,一般不全,或者是偏旧。 所以…

内存地产风云录:malloc、free、calloc、realloc演绎动态内存世界的楼盘开发与交易大戏

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 在这个波澜壮阔的内存地产世界中,malloc、free、calloc和realloc四位主角,共同演绎着一场场精彩绝伦的楼盘开…

RS232,RS422,RS485介绍

目录 一.前言 二.示意图 三.RS-232 四.RS-422 五.RS485 一.前言 请你根据这个目录生成一段前言:一.前言 二.示意图 三.RS-232 四.RS-422 五.RS485 在本文中,我们将介绍RS-232、RS-422和RS-485这三种串行通信协议。这些协议在计算机和外部设备之间的数据传输中起着重要的…

Linux的网口名字的命名规则

在工作中,偶尔看到有些机器的网口名字是以ethX命令,有些则以enpXsX这种名字命名。网上的资料说的都不太明白,资料也无据可查,很难让人信服。于是决定自己查了下官方的资料和源码,把这些搞清楚。 官方文档:Predictable…