ZGC的介绍

news/2024/12/28 16:41:32/

背景

在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.ppmy.cn/news/1415895.html

相关文章

跟TED演讲学英文:The dark side of competition in AI by Liv Boeree

The dark side of competition in AI Link: https://www.ted.com/talks/liv_boeree_the_dark_side_of_competition_in_ai Speaker:Liv Boeree Date: October 2023 文章目录 The dark side of competition in AIIntroductionVocabularyTranscriptSummary后记 Introduction Co…

SpringCloud Alibaba Sentinel 创建流控规则

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第十四篇,即介绍 SpringCloud Alibaba Sentinel 创建流控规则。 二、基本介绍 我们在 senti…

从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

本文为从零开始写 Docker 系列第十篇,实现类似 docker logs 的功能,使得我们能够查查看容器日志。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: 核心原理&#x…

打破传统,蔚莱普康定义国货美妆新未来

在全球美妆市场经济改革的今天,中国新兴品牌蔚莱普康,正在以前所未有的速度和规模,冲破瓶颈,赢得市场的广泛认可。这一切,得益于国家政策的扶持和国货品牌自身的不懈努力与创新。 各类国潮产品不断‘出圈’的背后&…

每日一题---OJ题: 相交链表

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题---相交链表,准备好了吗? Ready Go! ! ! emmm,看这道题好像不怎么难,我们一起画图分析分析 上图中,A链表有5个结点,分别为 a1,a2,c1,c2,c3 ; B链表有6个结点,分别为 b1,b2,b3,c1,c2,c3 ; A链表和B链表在c1结点相交 …

神经网络训练中batch的作用

在神经网络训练中,batch的作用主要包括以下几个方面: 减少内存占用和计算成本:在训练神经网络时,需要加载并处理大量的数据。使用batch训练可以将数据分成较小的批次,每次处理一小部分数据,从而减少内存占用…

gitee和idea集成

1 集成插件 2 配置账号密码 3 直接将项目传到仓库 4直接从gitee下载项目

Dev C++ 下载安装+设置C++11版本

1.下载安装 DevC 软件下载及安装教程(详细、具体)_devc下载-CSDN博客 2.设置C11版本 工具---编译选项 编译器---勾选【编译时加入以下命令】---填写【-stdc11】