Shenandoah GC算法

news2024/11/27 2:38:38

概述

最早由Red Hat公司发起,目标是利用现代多核CPU的优势,减少大堆内存在GC时产生的停顿时间。随OpenJDK 12一起发布,暂停时间不依赖于堆的大小;这意味着无论堆的大小如何,暂停时间都是差不多的。

Shenandoah最初的目标是把GC停顿时间降到毫秒级,并且将对内存的支持扩展到太字节级别。为降低停顿时间,回收器需要使用更多的线程来并发处理回收任务,而要在降低停顿时间的同时能够支持更大的堆空间,回收器对CPU的多核处理能力提出更高的要求。

支持的特性:

  • 解释器
  • C1屏障
  • C2屏障
  • 引用
  • JNI临界区域
  • System.gc()

策略

Shenandoah GC策略

策略GC触发的条件GC选择回收分区的条件
static当内存可用达到一定的國值之后,将启动GC在进行GC时,只选择垃圾超过一定阈值的分区
passive直到发生OOM,直接启动FGC在进行GC时,只选择垃圾超过一定阈值的分区,并且分区在转移后仍然能保留一定的预留空间
aggressive总是启动GC在进行GC时,只要分区有垃圾就会启动GC。判断分区是否有垃圾的条件:分区中垃圾超过一定的阈值;分区中可用的对象所占的空间小于一定的阈值
adaptive默认选项。当内存可用达到一定的阈值之后,或从上次GC到现在已经使用的内存超过一定阈值后,或根据使用的内存预测可用的内存不足以支撑到下一次GC时,将启动GC在进行GC时,只选择垃圾超过一定阈值的分区,并且分区在转移后仍然能保留一定的预留空间
compact当内存可用达到一定的阈值之后,或从上次GC到现在已经使用的内存超过一定阈值后,将启动GC在进行GC时,只选择垃圾超过一定阈值的分区,并且分区在转移后仍然能保留一定的预留空间。与自适应策略相比,它的阈值更低,回收的分区更多。
traversal启动遍历GC,是正常GC的优化版,把重定向和标记进行合并。GC触发时机和adaptive策略相同回收的分区策略也和adaptive策略相同

GC策略决定Shenandoah何时启动GC以及在GC时回收哪些分区。

算法

Shenandoah为了更好地管理内存,实现4类GC算法:

  1. 正常回收算法(Normal GC):GC的过程通常按照初始标记、并发标记、再标记、并发转移、结束转移的步骤执行
  2. 降级回收算法(Degenerated GC):在GC过程中,如果遇到内存分配失败,将进入降级回收。降级回收实质上是在STW中进行的并行回收
  3. 全回收算法(Full GC):如果在降级回收中再次遇到内存分配失败的情况,将进入全回收。和G1的并行FGC非常类似。
  4. 遍历回收算法(Traversal GC):GC过程按照初始遍历、并发遍历、预清理和结束遍历的步骤执行。

降级回收算法和并行FGC类似,都是在STW中进行的。它和FGC最大的区别就是降级回收会重用当前已经并发执行的标记、转移或者重定位的信息,从当前GC失败的地方继续向下执行。

正常回收

Shenandoah中正常回收有两种模式:一般模式和优化模式。区别在于是否在标记时执行重定位,在标记的过程中执行重定位,则称为优化模式,否则称为一般模式。可通过参数ShenandoahUpdateRefsEarly控制,可能值为off/false,表示GC执行优化模式;on/true/adaptive,表示执行一般模式。

一般模式GC步骤:

  • 初始标记:Init Mark,从根集合出发,标记根集合所有引用的对象,这些对象作为第二步并发标记的出发点。会触发STW
  • 并发标记:Concurrent Marking,以第一步标记的对象作为出发点,开始并发地标记对象
  • 预清理:在进入再标记阶段之前,先处理引用对象,把仍然活跃的引用对象重新激活,不进行真正的GC。在该阶段是并发执行的,但是只有一个并发工作线程执行预清理
  • 再标记:在该阶段要做3件事:终止标记、计算回收集、转移根集合直接的引用对象。会触发STW
  • 清理:再标记结束后,部分分区可能已经没有任何活跃对象,这些分区就可以被回收
  • 并发转移:Concurrent Evacuation,根据转移集,对所有在转移集中的活跃对象进行转移
  • 初始重定位:Init Update Refs,初始重定位将根据SATB算法重置分区中对象分配的起始内存地址位置。会触发STW
  • 并发重定位:遍历不属于回收集合中的分区的对象,根据brook pointer更新对象的引用指针
  • 结束重定位:遍历根集合中所有引用的对象,更新对象的引用指针。会触发STW
  • 再清理:因回收集合中对象全部转移完成,所以可以释放空间。

整个GC活动图:
在这里插入图片描述
优化模式GC的步骤:

  • 初始标记:和一般模式中初始标记相同
  • 并发标记:以第一步标记的对象作为出发点,开始并发地标记对象,注意在这一步中首先判断对象是否需要重定位,如果需要,则进行重定位
  • 预清理:和一般模式中预清理相同
  • 再标记:在该阶段主要做4件事,分别为更新根集合中所有对象的引用、终止标记、计算回收集、转移根集合直接的引用对象。在STW中进行
  • 清理:和一般模式中清理相同
  • 并发转移:和一般模式中并发转移相同
  • 结束转移:设置转移结束标记,重置TLAB等信息。在STW中进行

Shenandoah中的优化模式和ZGC的GC过程基本类似,把标记阶段和重定位阶段合并。正常回收在运行的过程中,应用程序和GC线程都可能需要分配内存空间,也都有可能遇到内存不足导致分配失败的情况,此时正常回收将进入降级回收状态,如果在降级回收时再遇到内存不足,将进入FGC状态。

正常回收、降级回收和FGC交互图:
在这里插入图片描述

遍历回收

Shenandoah遍历回收就是把并发标记、并发转移和并发重定位合并到一个阶段。

Shenandoah遍历回收的步骤:

  • 初始遍历:初始遍历待回收集合,从根集合出发,标记根集合所用引用的对象,这些对象作为第二步并发标记的出发点。会触发STW
  • 并发遍历:根据第一步标记的对象作为出发点,开始并发地标记对象
  • 结束遍历:该阶段主要做两件事,分别为标记SATB队列中新增的引用对象、终止标记。会触发STW
  • 清理:清理可回收的分区

遍历回收算法,思路简单但实现复杂。需要解决两个问题:

  1. 如何选择带回收的分区?在进入优化回收时,第一次GC还没有足够的信息表明分区对象的存活情况,所以需要在下一次GC时才能选择哪些分区能够被回收。
  2. 如何保持一致性?主要有3种一致性问题:遍历一致性、数据一致性和重定位一致性。
    • 遍历一致性:如何在遍历时正确地处理对象关系图的变化?
    • 数据一致性:如何保证读的时候总是访问最新的数据?如何保证写的时候能访问到正确的对象?
    • 重定位一致性:如何避免一般的成员变量更新和重定位成员变量更新的竞争?

Shenandoah中解决一致性问题的方法到也比较简单。通过执行顺序的不同来保证一致性。具体来说在标记时,如果对象需要更新引用,则先更新引用,如果没有引用更新,则判断是否需要转移,如果需要转移则转移,最后才能标记对象。

延伸

对比G1、ZGC

G1、ZGC和Shenandoah的异同点

对比项G1ZGCShenandoah GC
内存连续性堆内存基于分区实现,最小分区为1MB,最大分区可达32MB基于分页设计,类似于G1分区。页面有3种类型,2MB、32MB和N*MB基于分区理论实现,最小分区为256KB,最大分区可为32MB
是否支持分代支持不支持不支持
是否全量回收新生代分区在 YGC/MixedGC/FGC 中会被全部回收老生代在 Mixed GC 时部分回收,在 FGC 时全部回收部分页面回收部分分区回收
屏障支持读屏障和写屏障,读屏障是为了正确标记对象,写屏障是为了处理代际引用关系管理(G1中有单独的线程处理代际引用)仅需要支持读屏障即可实现并发标记、并发转移和并发重定位支持读屏障和写屏障,读屏障是为了对象正确标记和并发处理读数据写屏障是为了并发处理同时写数据、实际上Shenandoah还需要支持比较屏障(比较屏障是通过两个读屏障实现的)
GC时并发性目前只支持并发标记支持并发标记、并发转移和并发重定位支持并发标记、并发转移和并发重定位
GC触发策略使用衰减停顿模型预测是否启动GC提供多种触发GC的规则,其中最为常见的触发方式是根据正态分布预测的内存分配的情况触发提供多种触发GC的策略:static、passive、aggressive、compactadaptive
NUMA支持尚未支持,提案JEP 345为G1支持NUMA支持不支持
字符串去重支持不支持支持
引用处理并行处理并发处理并行处理

在GC时非常类似,都实现并发垃圾标记、并发转移、并发重定位、压缩堆空间。Shenandoah更加类似于G1,把G1中的并行转移变成并发转移。

ZGC并发的基础是地址多视图映射。

Shenandoah并发的基础是在对象头增加一个额外数据Brook pointer,在实现读写屏障时通过Brook pointer访问对象。

参考

  • 新一代垃圾回收器ZGC设计与实现

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

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

相关文章

服务器感染了.rmallox勒索病毒,如何确保数据文件完整恢复?

引言: 随着网络技术的发展,勒索病毒已经成为当今数字时代的一大威胁。近期出现的.rmallox勒索病毒更是引发了广泛关注。本文将深入探讨.rmallox勒索病毒的特点,并提供一系列应对这一威胁的高效策略。如果受感染的数据确实有恢复的价值与必要…

Android MTK 屏下指纹的调试过程记录

Demo链接 -----> https://download.csdn.net/download/u011694328/89118346 一些品牌手机都有了屏下指纹的功能,还算是个比较新颖的功能,最近有项目需要使用屏下指纹, 使用的是汇顶(Goodix)的指纹方案&#xff0c…

【vue】绑定事件 v-on

v-on 简写&#xff1a; clickkeyupkeydownkeyup.wkeyup.ctrl.a <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

跟TED演讲学英文:The inside story of ChatGPT‘s astonishing potential by Greg Brockman

The inside story of ChatGPT’s astonishing potential Link: https://www.ted.com/talks/greg_brockman_the_inside_story_of_chatgpt_s_astonishing_potential Speaker: Greg Brockman Date:April 2023 文章目录 The inside story of ChatGPTs astonishing potentialIntro…

SQLite---调试提示(十九)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite Android 绑定&#xff08;十八&#xff09; 下一篇&#xff1a;从 SQLite 3.4.2 迁移到 3.5.0&#xff08;二十&#xff09; ​ 以下是 SQLite 开发人员跟踪、检查和了解 核心 SQLite 库。 这些技术旨在帮助理解 核…

基于arcgis /envi PCA(主成分分析)实现过程

基于arcgis /envi PCA(主成分分析)实现过程 1 提取研究范围 2对研究范围进行重采样 &#xff08;根据数据情况进行选做&#xff0c;如数据较大建议进行该步骤操作&#xff09; 3 对研究范围内数据进行归一化处理 4 将空值替换为0 5 对同期不同要素数据进行波段合成 对波段…

探讨解决emp.dll文件丢失问题的步骤和方法,一键解决emp.dll丢失烦恼问题

在电脑使用过程中&#xff0c;有时会遇到提示emp.dll文件丢失的错误弹窗&#xff0c;这种情形通常由于某些误操作或问题导致emp.dll文件出现异常。面对这样的状况&#xff0c;可以采取以下几种方法来解决emp.dll文件缺失的问题。接下来&#xff0c;让我们共同探讨解决emp.dll文…

Java复习第十七天学习笔记(转发、重定向,GET,POST),附有道云笔记链接

【有道云笔记】十七 4.3 转发、重定向、Get、POST、乱码 https://note.youdao.com/s/GD5TRksQ 一、转发 转发&#xff1a;一般查询了数据之后&#xff0c;转发到一个jsp页面进行展示 req.setAttribute("list", list); req.getRequestDispatcher("student_lis…

美团外卖基于GPU的向量检索系统实践

总第587篇 | 2024年第007篇 到家搜索业务具有数据量大、过滤比高等特点&#xff0c;为了在保证高召回率的同时进一步提高检索性能&#xff0c;到家搜索技术团队与美团基础研发机器学习平台团队基于GPU实现了支持向量标量混合检索的通用检索系统&#xff0c;召回率与检索性能均有…

【精品PPT】智慧路灯大数据平台整体建设实施方案(免费下载)

1、知识星球下载&#xff1a; 如需下载完整PPTX可编辑源文件&#xff0c;请前往星球获取&#xff1a;https://t.zsxq.com/19QeHVt8y 2、免费领取步骤&#xff1a; 【1】关注公众号 方案驿站 【2】私信发送 【智慧路灯大数据平台】 【3】获取本方案PDF下载链接&#xff0c;直…

绝地求生:AUG爆裂弹球黑货箱:街机动漫风格大家会喜欢吗?

大好&#xff0c;我闲游盒&#xff01; 4.10更新后&#xff0c;AUG的新成长型也出来了&#xff0c;更新后我觉得AUG变好用了一点&#xff0c;不知道大家有没有感觉出来&#xff1f; 宝箱概率 本期主角 AUG-爆裂弹球&#xff08;紫色配粉红色&#xff09; 本次的AUG我才升到5级…

【力扣】101. 对称二叉树

101. 对称二叉树 题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示…

HWOD:二维数组下标合法性判断

一、知识点 1、停止读取的判定条件有两种写法 (1)&#xff1a;while(scanf()!EOF) (2)&#xff1a;while(scanf()>0) 在代码提交平台(1)和(2)都可以用 在本地&#xff0c;只能用(2)&#xff0c;且要有非法输入的配合。比如要读取的是整数&#xff0c;但输入了字符串&am…

UE5 在骨骼动画模型上绘制贴图

参考&#xff1a;Unreal 5.1 - How to paint damage textures and other effects on skeletal meshes 针对模型&#xff0c;在运行状态下通过射线指定一定范围&#xff0c;添加材质效果。 核心思路 通过射线获取命中点&#xff0c;作为材质参数材质中&#xff0c;命中的世界…

智慧矿山视频智能监控与安全监管方案

一、行业背景 随着全球能源需求的日益增长&#xff0c;矿业行业作为国民经济的重要支柱&#xff0c;其发展日益受到广泛关注。然而&#xff0c;传统矿山管理模式的局限性逐渐显现&#xff0c;如生产安全、人员监管、风险预警等方面的问题日益突出。因此&#xff0c;智慧矿山智…

LabVIEW无线快速存取记录器(WQAR)测试平台

LabVIEW无线快速存取记录器&#xff08;WQAR&#xff09;测试平台 随着民用航空业的迅速发展&#xff0c;航空安全的保障日益成为公众和专业领域的关注焦点。无线快速存取记录器&#xff08;WirelessQuick Access Recorder, WQAR&#xff09;作为记录飞行数据、监控飞行品质的…

个人博客系统项目(SpringBoot+Linux部署上线)

在学完SpringBoot框架、MyBatis后&#xff0c;直接开始做第一个项目&#xff1a;博客系统 首先&#xff0c;该博客系统包含核心功能有&#xff1a; 一、登录、注册、退出登录功能。 二、没有登陆前可以查看博客首页以及博客展示的分页处理&#xff0c;以及点击查看博客可以…

10个大型语言模型(LLM)常见面试问题和答案解析

今天我们来总结以下大型语言模型面试中常问的问题 1、哪种技术有助于减轻基于提示的学习中的偏见? A.微调 Fine-tuning B.数据增强 Data augmentation C.提示校准 Prompt calibration D.梯度裁剪 Gradient clipping 答案:C 提示校准包括调整提示&#xff0c;尽量减少产生…

g4f姊妹篇:g4l gpt4local面世拉!

众所周知g4f很强&#xff0c;安装具体见&#xff1a;gpt4free带来了更好的chatgpt体验&#xff01;-CSDN博客 可喜的是&#xff0c;现在它的姊妹篇&#xff0c;gpt4local也面世拉&#xff01;g4l 是一个高级 Python 库&#xff0c;允许您使用 llama.cpp 绑定运行语言模型。它是…

服务器挖矿病毒解决ponscan,定时任务解决

服务器挖矿病毒解决ponscan&#xff0c;定时任务解决 挖矿病毒会隐藏chattr的操作权限&#xff0c;让我们无法删除病毒文件&#xff0c;杀掉病毒进程。所以要去下载chattr.c的文件&#xff0c;编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …