ZGC的介绍

news2024/11/22 6:32:57

背景

在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.coloradmin.cn/o/1588853.html

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

相关文章

String类(2)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&…

【日常记录】【JS】使用Number.prototype.toLocaleString 对 数字做 格式化

文章目录 1、引言2、语法参数3、常见案例4、参考链接 1、引言 在目前的项目中,经常需要给数字做格式化处理,特别是财务方面,比如分割成千分位,保留小数,增加符号等 ,这些都需要我们手写一些函数来处理。 但…

Vue.js组件精讲 第2章 基础:Vue.js组件的三个API:prop、event、slot

如果您已经对 Vue.js 组件的基础用法了如指掌,可以跳过本小节,不过当做复习稍读一下也无妨。 组件的构成 一个再复杂的组件,都是由三部分组成的:prop、event、slot,它们构成了 Vue.js 组件的 API。如果你开发的是一个…

TechTool Pro for Mac v19.0.3中文激活版 硬件监测和系统维护工具

TechTool Pro for Mac是一款专为Mac用户设计的强大系统维护和故障排除工具。它凭借全面的功能、高效的性能以及友好的操作界面,赢得了广大用户的信赖和好评。 软件下载:TechTool Pro for Mac v19.0.3中文激活版 作为一款专业的磁盘和系统维护工具&#x…

大数据入门之如何利用Phoenix访问Hbase

在大数据的世界里,HBase和Phoenix可谓是一对黄金搭档。HBase以其高效的列式存储和强大的数据扩展能力,成为大数据存储领域的佼佼者;而Phoenix则以其SQL化的操作方式,简化了对HBase的访问过程。今天,就让我们一起看看如…

哲学家带你实现单链表

最近本哲♂学家学习了链表这一新的数据结构,接下来由我带领大家实现链表: 一 、头文件 注:本写法是无头的单链表,所以传参为二级指针。 我们事先写好所要完成的函数,在 .c文件中进一步去完成。 typedef int SLTData…

19(20)-1(3)-CSS3 平面 2D 变换+CSS3 过渡

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 ✍一、CSS3 平面 2D 变换💎1 坐标轴💎2 transform 语法…

云原生数据库海山(He3DB)PostgreSQL版核心设计理念

本期深入解析云原生数据库海山PostgreSQL版(以下简称“He3DB”)的设计理念,探讨在设计云原生数据库过程中遇到的工程挑战,并展示He3DB如何有效地解决这些问题。 He3DB是移动云受到 Amazon Aurora 论文启发而独立自主设计的云原生数…

【学习】Spring IoCDI

🎥 个人主页:Dikz12📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 Spring 是什么? 什么是 IoC容器? 传统开发模式 loC开发模式 IoC的优势 IoC 的使用 Bean的…

策略为王股票软件源代码-----如何修改为自己软件04

上面是如何打开-------类---------函数 1. 数据结构 1) 股票数据结构的定义在头文件Src\StkLib\Include\Stock.h中,主要的几个结构定义为: KDATA K线数据结构 DRDATA 除权数据结构 REPORT 交易所在交易时间内不断发送的报价信息 MINUTE 分钟成交…

最大连续1的个数 III

题目链接 最大连续1的个数 III 题目描述 注意点 nums[i] 不是 0 就是 10 < k < nums.length 解答思路 创建一个滑动窗口&#xff0c;保证窗口内翻转0的个数始终不大于k&#xff0c;不断移动窗口的右边界&#xff0c;有以下三种情况&#xff1a; 当右边界的值为1&…

Java基础第十课——类与对象(1)

前面二白的九讲属于Java基础方面的内容&#xff0c;总体来说偏基础和简单&#xff0c;能完成的操作也有限&#xff0c;有兴趣的同学可以写一写相关的管理系统&#xff0c;后面二白也会上传一些自己敲的小系统&#xff0c;下面就要开始Java面对对象的知识内容了&#xff0c;从这…

【年度典型案例】扫码就能领补贴?通知社保在线速办?当心是钓鱼骗局!

随着我们生活的数字化程度越来越高&#xff0c;完成各种业务和服务变得前所未有的便捷。只需轻轻一点手机屏幕&#xff0c;我们办事儿变得飞快又方便。然而&#xff0c;正当我们享受这种数字化带来的便捷时&#xff0c;一些不法分子也在暗中伺机而动&#xff0c;利用各种手段制…

c# refc# substring c# 反射c# split c# websocket c# datatable使用

在C#编程中&#xff0c;ref关键字、Substring方法、反射&#xff08;Reflection&#xff09;、Split方法、WebSocket通信以及DataTable的使用都是常见的技术和方法。下面我将逐一为您详解这些内容。 1. C# ref关键字 ref关键字在C#中用于按引用传递参数。这意味着当您将变量作…

PC-lint 学习之配置方法

1. 下载PC-lint 9.0后&#xff0c;点击pclint9setup.exe进行安装&#xff08;我只安装了C/C语言&#xff0c;其他语言可安装时选择&#xff09; 2.安装完成后&#xff0c;打开keil5&#xff0c;选择配置 3. 配置选项 &#xff08;1&#xff09;Lint Executable&#xff1a;在第…

基于SpringBoot+Vue+Mysql的图书管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

html+javascript,用date完成,距离某一天还有多少天

图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…

LeetCode---392周赛

题目列表 3105. 最长的严格递增或递减子数组 3106. 满足距离约束且字典序最小的字符串 3107. 使数组中位数等于 K 的最少操作数 3108. 带权图里旅途的最小代价 一、最长的严格递增或递减子数组 按照题目要求进行模拟即可&#xff0c;这里提供两者思路&#xff1a; 1、两次…

Harmony鸿蒙南向外设驱动开发-Codec

功能简介 OpenHarmony Codec HDI&#xff08;Hardware Device Interface&#xff09;驱动框架基于OpenMax实现了视频硬件编解码驱动&#xff0c;提供Codec基础能力接口给上层媒体服务调用&#xff0c;包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…