JAVA中的垃圾回收器(3)----ZGC

news2024/11/20 20:35:17
一)ZGC介绍:ZGC停顿时间不超过了1ms,且不会随着堆的增加而增加

如果堆空间越来越大,那么垃圾回收的造成的STW的时间会呈现线性的增长

堆空间分页模型:小页面优先回收,大页面尽量不回收

ZGC本身只是支持三种页面,分别是小页面,中页面,大页面,其中小页面指的是2MB的内存空间,中页面指的是32MB的内存空间,大页面指的是操作系统分配的大页

当对象大小小于等于256KB时,对象分配在小页面,当对象大小在256KB和4M之间,对象分配在中页面,当对象大于4M,对象分配在大页面,ZGC对于不同页面回收的策略也不同。简单地说,小页面优先回收;中页面和大页面则尽量不回收;

1)ZGC会自动识别NUMA架构,把一块大的内存拆分成若干个小内存来提供个不同的CPU来进行使用,每一块内存会让一个CPU优先访问;

2)ZGC小页面优先回收,大页面尽量不回收,可以选取垃圾特别多的页面进行回收,一个页面垃圾越多,那么回收的优先级就越高,如果将所有的页面都进行回收,那么回收的效率就特别低;

ZGC中的转移:如果是同一个页面等同于标记整理算法,如果是不同的页面,等同于复制算法

标记:从根集合出发,标记活跃对象,此时内存存在着活跃对象和死亡对象

转移:把活跃对象转移复制到新的内存上面,原来的内存空间可以回收

重定位:因为对象的内存地址发生了变化,所以所有的指向对象的老地址的指针都要调整到对象的新的地址上面

三色标记漏标:就是用来修复并发标记中的漏标记问题,就是将B扫描完成之后,B就会变成黑色,此时B引用着D,D引用着E,此时如果在并发标记过程中D指向E的指针没了(D还没有来得及指向E),此时B指向了E,此时因为B已经变成了黑色,B不会重新扫描,但是此时的E就变成了一个垃圾对象,此时就发生了漏标操作CMS使用的是增量更新G1使用的是原始快照

B C D此时扫描完成,变成绿色,M0标记位是1,此时假设B C D 扫描完成之后发现B对象指向了D对象,此时D被其他对象指向了,但是此时B不会被扫描了,此时就出现漏标的情况,此时D就是蓝色的对象就被认为是垃圾,并发标记完成变成绿色;

二)指针着色技术: 

1)颜色指针是ZGC的核心概念,因为zgc在指针中借了几位来搞事情,所以它必须要求在64位的系统上,2^10=1K,2^20=1G,2^32=4G,64位系统可以达到4TB;

2)在ZGC中使用低42位来表示使用中的堆空间(真实内存),ZGC借助高几位来做GC相关的事情,快速实现垃圾回收中的并发标记,转移和重定位等等;

3)这几个标记位具有互斥性,这几个标志位有且只有一个位置为1,某一个标志位为1表示有颜色;

4)ZGC只是支持64位系统,64位指针,ZGC中低42位表示的是堆空间的地址范围,因为42位是4个T,ZGC借助高几位来实现做GC垃圾回收相关的事情,用于快速实现垃圾回收中的并发标记,转移和重定位等,这几个高位是存在互斥性的,这几个位置有且只能有一个位置置为1,只要这个位置是1,那么指针就会带有颜色,颜色指针表示的是某一个比特位是1了,那么就代表着这个指针带有颜色了,在进行垃圾回收的时候,和对象头就没有关系了,其他的垃圾回收器在进行垃圾标识的时候会把垃圾的状态写到对象头里面,但是在ZGC里面它使用的不是对象头而是指针的着色技术;

颜色指针的概念:CMS和以前的垃圾回收器是标记在对象内部的,但是ZGC是标记在指向对象的引用上面,内部会分配4个比特位专门去做标记,这就叫做颜色指针,下面是初始状态,GC垃圾回收器还没有启动:

1)初始情况下,A,B,C,D在堆上面的不同地址中,为了方便演示,对象地址就使用1-9来表示,况且都被GCROOTS引用给关联着

2)G1垃圾回收器没有启动的时候如果new 对象,那么指针的颜色就是蓝色,也就是Remapped他的标记位就是1,这个对象已经完成重定位,当指针内存地址指向真正的对象的内存地址,那么此时Remapped标记为就是1,就是刚刚new出来的对象或者是垃圾回收器已经转移完成的对象(已经完成重定位);

三)ZGC的垃圾回收过程:

1)初始标记:只是进行标记GCroots直接关联的对象,此时A的颜色是绿色,M0为1表示颜色是绿色,代表已经标记过的对象,代表这本次垃圾回收对象的指针标记过的颜色,因为此时GCROOTS直接关联的对象是A,那么ZGC就把A指针直接标记成绿色,代表A已经被标记过

初始标记存在STW,但是时间很短,初始标记就是只是需要扫描所有的GCROOTS直接关联的对象;

2)并发标记:这个过程扫描引用链上面的所有对象,这段时间GC的处理时间非常长,但是没有STW,业务线程可以继续进行执行,但是会产生漏标问题;

3)重新标记:此时需要使用原始快照来解决漏标方案,会产生STW,比初始标记快,比并发标记慢一些,经过重新标记以后,整个堆内存中蓝色的对象就是垃圾对象,如果此时有新来的new对象就会被标记成蓝色;

4)并发转移准备:在内部会使用一些算法,计算一下有哪些大概有哪些regin要进行清理和G1里面计算回收比例是一样的,那一块回收比例大一些就会回收哪一块,没有STW

4.1)进行分析,哪些页面有垃圾,哪些页面的垃圾有多少,占多少总页面比例,并进行分析,并针对于垃圾较多的区域优先进行回收,作为一个优先级别;

4.2)如果发现一个区域地方全是垃圾,然后可以在并发转移准备并发全部进行清理,对业务程序没有任何影响,这个阶段用户线程和垃圾回收线程一起跑;

5)初始转移:对应着初始标记的对象将GCROOTS直接关联的对象进行复制算法转移到另一个位置,初始转移的对象都是绿色的对象,将A的引用指针进行更新,并且将MO状态转换到Remapped状态,这个过程会造成STW,存在短暂的STW;

5.1)先对页面作短暂的STW,将GCROOTS直接关联的对象(地址1)A转移到小页面中的内存地址是10的地方;

5.2)跟新指向A对象的指针;

5.3)将指向A对象的指针变成蓝色(已经从初始阶段完成了并发转移),改之前是绿色的(代表完成了初始标记但是还没有完全完成并发转移),下面是初始转移完成的情况:

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

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

相关文章

frp-内网穿透部署-ubuntu22服务器-windows server-详细教程

文章目录 1.下载frp2.配置服务器2.1.配置frps.ini文件2.2.设置服务文件2.3.设置开机自启和服务操作2.4.后台验证2.5.服务器重启 3.配置本地window3.1.frpc配置3.2.添加开机计划启动3.3.控制台启动隐藏窗口 4.centos防火墙和端口3.1.开放端口3.2.查看端口 5.关闭进程5.1.杀死进程…

NSS刷题 js前端修改 os.path.join漏洞

打算刷一遍nssweb题(任重道远) 前面很简单 都是签到题 这里主要记录一下没想到的题目 [GDOUCTF 2023]hate eat snake 这里 是对js的处理 有弹窗 说明可能存在 alert 我们去看看js 这里进行了判断 如果 getScore>-0x1e9* 我们结合上面 我觉得是6…

【MySQL】 复合查询 | 内外连接

文章目录 1. 复合查询多表笛卡尔积自连接在where子句使用子查询单行子查询多行子查询in关键字all关键字any关键字 多列子查询 在from子句中使用子查询合并查询unionunion all 2. 内连接3. 外连接左外连接右外连接 1. 复合查询 多表笛卡尔积 显示雇员名、雇员工资以及所在部门…

基于Electron27+React18+ArcoDesign客户端后台管理EXE

基于electron27.xreact18搭建电脑端exe后台管理系统模板 electron-react-admin 基于electron27整合vite.jsreact18搭建桌面端后台管理程序解决方案。 前几天有分享electron27react18创建跨平台应用实践,大家感兴趣可以去看看。 https://blog.csdn.net/yanxinyun1990…

Unit1_1:分治问题之时间复杂度求解

文章目录 背景递归树法案例一案例二局限性 代入法/替代法主方法(重点) 背景 当碰到形如 T ( n ) a T ( ⌈ n b ⌉ ) O ( n d ) T(n)aT(\lceil \frac{n}{b} \rceil)O(n^d) T(n)aT(⌈bn​⌉)O(nd)的递推式,本质上就是将问题转化为规模更小的…

【MySQL数据库】初识MySQL数据库、安装MySQL

文章目录 前言一、什么是 MySQL?二、MySQL 的强大之处三、Ubuntu安装MySQL步骤 1: 更新包列表步骤 2: 安装 MySQL步骤 3: 启动 MySQL 服务步骤 4: 验证 MySQL 安装步骤 5: 确保 MySQL 安全性 总结 前言 在今天的数字化世界中,数据是企业和个人的重要资产…

BUUCTF qr 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 这是一个二维码,谁用谁知道! 密文: 下载附件,得到一张二维码图片。 解题思路: 1、这是一道签到题,扫描二维码得到flag。 flag:…

Java进阶(List)——面试时List常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合,需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中List集合的面试问题,结合源码分析题目背后的知识点。 其他相关的List的文章合集如下: 手动实现ArrayList & 源码的初步理解分析…

【计算机网络】三次握手 四次挥手

目录 1.三次握手 2.四次挥手 3.总结 三次握手和四次挥手是有连接特有的。三次握手,四次挥手指的是TCP有连接特点的中的步骤。建立连接(三次握手),断开连接(四次挥手)。建立连接操作一般都是客户端主动发起,断开连接操作客户端和服务器都可…

最短路径:迪杰斯特拉算法

简介 英文名Dijkstra 作用&#xff1a;找到路中指定起点到指定终点的带权最短路径 核心步骤 1&#xff09;确定起点&#xff0c;终点 2&#xff09;从未走过的点中选取从起点到权值最小点作为中心点 3&#xff09;如果满足 起点到中心点权值 中心点到指定其他点的权值 < 起…

3 tensorflow构建的模型详解

上一篇&#xff1a;2 用TensorFlow构建一个简单的神经网络-CSDN博客 1、神经网络概念 接上一篇&#xff0c;用tensorflow写了一个猜测西瓜价格的简单模型&#xff0c;理解代码前先了解下什么是神经网络。 下面是百度AI对神经网络的解释&#xff1a; 这里不赘述太多概念相关的…

安防监控项目---CGI接口的移植和使用

文章目录 前言一、CGI二、CGI的具体移植步骤2.1 cgi源码下载2.2 搭建交叉编译环境2.3 注意事项 三、测试结果总结 前言 书接上期&#xff0c;上期与大家分享的是boa服务器的移植&#xff0c;那么几天要和大家介绍的呢是一款接口&#xff0c;哈哈哈&#xff0c;用起来也是有点难…

vue使用百度富文本

&#x1f525;博客主页&#xff1a; 破浪前进 &#x1f516;系列专栏&#xff1a; Vue、React、PHP ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 1、下载UEditor 链接已放到文章中了 2、上传到项目目录中 一般上传到public下&#xff0c;方便到时候打包进去&#xff0c;以免…

骨传导耳机怎么佩戴,骨传导蓝牙耳机什么牌子好用

市面上的传统耳机一直以来都存在一些问题&#xff0c;比如长时间佩戴会导致耳朵不适&#xff0c;或者声音过大可能会伤害到耳膜。但是&#xff0c;现在有一种独特的耳机正在迅速走红&#xff0c;它被称为骨传导耳机&#xff0c;而骨传导耳机是怎么佩戴的呢&#xff0c;它在佩戴…

Ionic 7 版本发布 - 免费开源、超受欢迎的移动应用开发 UI 工具包,主题优雅且完美支持 Vue.js

Ionic 是一款优秀的移动 UI 框架&#xff0c;迭代也很快&#xff0c;现在也支持了 Vue&#xff0c;是时候向大家推荐用来开发 APP 了。 Ionic 全称是 Ionic Framework&#xff0c;是一个功能强大的开源 UI 工具库&#xff0c;用来帮助前端开发者构建跨平台的移动应用。 Ionic …

干洗店小程序上门洗鞋店管理软件功能介绍;

干洗店小程序上门洗鞋店管理软件功能介绍&#xff1b; 营销工具-洗鞋店管理软件多渠道玩法&#xff0c;拓客留客 支付-会员管理系统多种支付方式&#xff0c;灵活经营 ​ ​提供洗鞋店管理软件服务&#xff0c;实现会员精细化运营 会员档案-洗鞋店管理软件记录会员的全方位信…

Pytorch 猫狗识别案例

猫狗识别数据集https://download.csdn.net/download/Victor_Li_/88483483?spm=1001.2014.3001.5501 训练集图片路径 测试集图片路径 训练代码如下 import torch import torchvision import matplotlib.pyplot as plt import torchvision.models as models import torch.nn a…

IntelliJ IDEA 安装mybaits当前运行sql日志插件在线与离线安装方法

先安装好idear 去网上找找这个安装包下载下来&#xff0c;注意版本要完全一致&#xff01; 比如&#xff1a; https://www.onlinedown.net/soft/1233409.htm手动安装离线插件方法举例 提前下载好插件的安装包 可以去网上下载这个安装包 搜索离线安装包的资源&#xff0c;包…

【文末送书】AI时代数据的重要性

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

亚马逊美国加拿大电动移动设备合规标准是什么?如何办理?

亚马逊美国站电动移动设备合规标准是什么&#xff1f; 加拿大站电动移动设备合规标准 办理流程&#xff1a; 1.填写申请表 2.提供产品的资料&#xff08;说明书&#xff0c;电路原理图&#xff0c;如是多个型号的&#xff0c;提供型号差异列表&#xff09; 3.寄样 4.测试 …