大概了解一下G1收集器

在上一篇文章中(链接:大概了解一下CMS收集器)我们提到,CMS是一种主要针对旧生代对象进行回收的收集器。与CMS不同,G1号称“全功能的垃圾收集器”,对初生代内存和旧生代内存均进行管理。鉴于此,这里先简单插入介绍一下HotSpot虚拟机对于初生代内存的管理方式。

初生代内存管理

在HotSpot虚拟机中,初生代分为两个部分:Eden区和Survivor区,其中Survivor区又会被分为From区和To区,三者的比例通常为8:1:1。
在这里插入图片描述

初生代的对象并不会在一次GC后立刻被转移到旧生代,而是需要经过一定次数的初生代GC后才会晋升,这个次数我们可以称之为年龄。

将Survivor区划分为From和To的意图就很明显了,记得我们上文说到的“标记清除三兄贵”么,这不就是其中的标记复制算法嘛。

  • To区作为备用内存区
  • From区中的对象会在GC中进行遍历标记,标记结束进入清除阶段后,对于存活的对象,如果没有达到年龄,就被复制到To区,如果达到要求的年龄,就晋升到旧生代。
  • Eden区是创建新对象时默认的区域,也就是说Eden区中都是新创建的对象,之所以Eden区要比Survivor区大很多,也是基于一个假设:大部分新建对象的生命周期都很短,可以被很快回收。
  • Eden区的对象如果在GC中存活下来,认为一定达不到晋升所需的年龄,因此不需要像From中的对象一样计算年龄,直接复制到To区。
  • 之后清空Eden区和From区。
  • 最后将From区和To区交换。
    在这里插入图片描述
    在这里插入图片描述

比如上图这种情况:

  • 对象A和E在GC中存活下来,E没有达到要求的年龄,移动到To区,A是Eden区中的对象,直接移动到To区
  • 对象B和D没有在GC中存活下来,清除
  • 对象C在GC中存活下来,且达到要求的年龄,晋升到旧生代

移动后的情况如下:
在这里插入图片描述
最后将From和To交换:
在这里插入图片描述

G1(Garbage First)

在下面这两篇文章中我们已经介绍过分代GC中常用的一些概念(包括Region),本文就不再赘述。
分代GC前置概念(一):Card Table 和 Remembered Set
分代GC前置概念(二):TLAB

在G1中,内存仍然被分成初生代(包括Eden和Survivor)和旧生代,但与老的内存管理方式不同:

  • G1中每一部分的内存都是由多个Region组成的,因此只是逻辑上连续,并不需要物理上连续
  • G1中每一部分的内存大小是不固定的,会动态调整
  • G1中可以手动设置期望的GC时长,当然这只是个期望值,但G1会根据这个期望值动态的选择实际触发GC还是分配更多的空闲Region给当前代际
  • G1还会根据设置的期望值,动态决定对哪些Region进行实际回收,以使效率最高用时最少,计算得到的Region集合,被称为CSet。

在这里插入图片描述

初生代GC(Young GC)

g1源码之youngGC技术细节探究

当新创建小对象时默认将其分配在新生代的Eden区中(大对象在Humongous区,跟随旧生代处理,这里不讨论),当Eden没有足够空间时,G1会根据上文所说的期望时间与当前Region的使用情况,决定此时是给Eden区分配更多的可用Region还是触发一次Young GC:

  • Young GC只针对初生代进行
  • Young GC是全程STW的
  • Young GC的CSet包含所有初生代Region,也即整个初生代都在Young GC的回收范围内

Young GC几个主要过程:

  • STW——全程STW,没什么可说的。
  • 收集CSet——整个初生代区域。
  • 根扫描——从ROOT出发进行扫描。
  • 更新RSet——前文曾提到过,RSet的更新并不是实时的,因此在GC开始时,RSet可能并非最新,因此需要先将RSet更新到最新。
  • 扫描Rset——从RSet出发进行扫描。
  • 复制对象——将存活对象复制到对应的Region中(可能是Survivor,也可能是Old)。
  • 重构RSet——由于存活对象所在的Region发生了变化,需要对RSet进行重构。

混合GC(Mixed GC)

Mixed GC 针对的目标既包括初生代也包括旧生代,但对于旧生代,G1只对其中的一部分进行回收,也即Mixed GC的CSet包括了所有初生代Region和部分旧生代Region,这也是为了尽量使G1的耗时满足用户手动设置的期望值。

Mixed GC的触发时机为旧生代内存占整堆达到一定比例时(IHOP——InitiatingHeapOccupancyPercent)。之所以Mixed GC不像Young GC一样在内存耗尽时才触发,是因为当达到IHOP时,并非立刻开始一个严格完整的GC过程,而仅仅是将Mixed GC切换到了激活状态。在这之后,仍然会进行Young GC,此时Young GC会承担起一部分与Mixed GC重合的工作,从而为Mixed GC分担耗时。

在这里插入图片描述

如上图所示,Mixed GC的过程基本可以分为如下阶段:

初始标记

  • 当Mixed GC处于激活状态时,仍然会进行Young GC,以此来完成对初生代的处理
  • 当Mixed GC处于激活状态时,Young GC还会承担起对于与之相关的部分旧生代对象的标记工作,从而减少后续针对旧生代进行扫描的工作量
  • 由于Young GC是全程STW的,所以此阶段也为STW的

根扫描

  • 扫描ROOT对旧生代的引用
  • 此过程可与业务线程并发
  • 此过程可以被新触发的Young GC打断

并发标记

  • 扫描整个堆进行标记
  • 此过程可与业务线程并发
  • 此过程可以被新触发的Young GC打断

重标记

  • 与CMS的重标记阶段作用一样,但是通过初始快照(SATB——Snapshot At The Beginning)机制实现。
  • SATB简单理解为在GC开始时,根据对象内存地址进行粗略的划分,处于一定地址范围内的对象都被认为是本次需要关注的活跃对象,从而形成一份简单的内存快照。在上述的两个并发过程中,如果活跃对象的引用发生变化时,则进行记录。当并发标记结束后,对SATB记录的发生变化的对象进行重新标记。
  • SATB关注的是引用断开,即基于“删除写屏障”机制。 此过程为STW的

清理

  • 计算Region的回收价值(STW)
  • 清除RSet(STW)
  • 按照回收价值对Region进行清理(并发执行)。

复制

  • 将一些占用率过低的Region进行合并,对其中的对象进行复制/移动操作。
  • 此过程为STW的

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

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

相关文章

CrossOver24破解版下载安装与激活

在 Mac 上运行Windows 软件,CrossOver Mac 可以轻松地从 Dock 本地启动 Windows 应用程序,并将 Mac 操作系统功能(如跨平台复制和粘贴以及共享文件系统)集成到您的 Windows 程序中。 CrossOver 产品特性 无需重启 CrossOver 可以…

分布式存储系统BeeGFS的部署

1、集群架构 操作系统IP地址1*Ubuntu22.04192.168.1.742Ubuntu22.04192.168.1.603Ubuntu22.04192.168.1.674Ubuntu20.03192.168.1.136 上述四台电脑,我在1中下载了管理服务、元数据服务、存储服务、客户端服务,在2、3中下载了存储服务、客户端服务&…

峟思应变计:工程测量的精密之选

在工程领域中,对于材料应变情况的测量是至关重要的,而应变计则是这一任务中的关键设备。作为专业的工程仪器仪表品牌,峟思始终致力于研发和生产高精度、高可靠性的应变计产品,为铁路、建筑、桥梁、地铁等多个领域提供全面而高效的…

用html编写的小广告板

用html编写的小广告板 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…

WEB服务器-Tomcat(黑马学习笔记)

简介 服务器概述 服务器硬件 ● 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求&#xff0c;并进行处理&#xff0c;因此一般来说服务器应具备承担服务并且保障…

北航复试知识点总结

2024.2.25 住行 报道+机试+两天面试=4天 面试流程 (每个人大概20min,早一点到考场!) 形式:5位老师(一记录,四提问) 老师 陆峰 办公地址:北京航空航天大学新主楼H1033 电子邮箱: lufeng@buaa.edu.cn 个人主页:http://shi.buaa.edu.cn/lufeng/ 面试礼仪 于无形中…

springboot+vue前后端分离适配cas认证的跨域问题

0. cas服务搭建参考:CAS 5.3服务器搭建_cas-overlay-CSDN博客 1. 参照springsecurity适配cas的方式, 一直失败, 无奈关闭springssecurity认证 2. 后端服务适配cas: 参考前后端分离项目(springbootvue)接入单点登录cas_前后端分离做cas单点登录-CSDN博客 1) 引入maven依赖 …

高效备考2025年AMC8数学竞赛:2000-2024年AMC8真题练一练

我们今天来随机看五道AMC8的真题和解析&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。 为帮助孩子们更高效地备考&#xff0c;我整理了2000-2004年的全部AMC8真题&#xff0c;并且独家制作了多种在线练…

【粉丝福利社】一书读懂物联网:基础知识+运行机制+工程实现(文末送书-完结)

&#x1f3c6; 作者简介&#xff0c;愚公搬代码 &#x1f3c6;《头衔》&#xff1a;华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xf…

【Python笔记-设计模式】迭代器模式

一、说明 迭代器模式是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式&#xff08;列表、栈和树等&#xff09;的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素&#xff0c;而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…

解决浏览器访问百度,验证成功后提示仍然存在安全风险

如图所示&#xff0c;访问百度页面后&#xff0c;提示安全验证&#xff0c;验证通过后&#xff0c;仍然提示的存在安全风险&#xff0c;请再次验证&#xff0c;如此往复循环&#xff0c;无法登陆百度。 解决方案&#xff1a;关闭User-Agent Switcher for Chrome插件即可恢复正常…

(黑客技术)2024最新版零基础入门自学网络安全

一、自学网络安全学习的误区和陷阱 1.不要试图先以编程为基础的学习再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到的关键知识并不…

std::mutex

std::mutex 和其变体是 C 中用于线程同步的重要工具。让我们详细了解一下这四种互斥量的作用和使用案例&#xff1a; std::mutex&#xff1a; std::mutex 是一种独占式互斥量&#xff0c;用于保护共享数据&#xff0c;确保在同一时间只有一个线程可以访问它。它不支持递归锁定…

WeTrade一分钟带你了解二元期权和其他交易的不同

很多交易者有点分不清楚二元期权和外汇交易有什么不同&#xff0c;其实很简单&#xff0c;今天WeTrade众汇带你了解。 首先&#xff0c;外汇交易。 这是一个市场&#xff0c;就像在股票市场上一样&#xff0c;同样的供需关系&#xff0c;都有固定的交易时间。在外汇交易中&am…

亚信安慧AntDB开启超融合数据库新纪元

&#xff08;一&#xff09; 前言 据统计&#xff0c;在信息化时代的今天&#xff0c;人们一天所接触到的信息量&#xff0c;是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外&#xff0c;人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&…

亚信安慧AntDB:数据处理的好帮手

亚信安慧AntDB分布式数据库凭借平滑扩展、高可用性和低成本三大核心优势&#xff0c;在业界获得了极高的评价和认可。这些优点不仅为AntDB提供了巨大的市场发展潜力&#xff0c;也使其成为众多企业在数据管理上的首选解决方案。 AntDB的平滑扩展特性极大地提升了企业的灵活性和…

泰国见!盘古信息诚邀您参加泰国电子智能制造系列展

2024Intelligent Asia Thailand 首届泰国电子智能制造系列展来啦&#xff01; 广东盘古信息科技股份有限公司 诚邀您来参加&#xff01; 届时&#xff0c;盘古信息将会携自主研发的PCB行业数字化解决方案——IMS-MOM制造运营管理系统出席&#xff0c;诚挚邀请您莅临盘古信息…

node版本控制的利器:nvm

使用nvm 下载&#xff1a;https://github.com/coreybutler/nvm-windows/releases 安装指定版本node 命令nvm install 版本号 &#xff0c;例如&#xff1a;nvm install 10.23.0 可以同时安装多个版本&#xff1a; 确定使用的node版本 nvm use 版本号 搞定&#xff0c…

2024Fiddler如何进行弱网测试!

使用Fiddler对手机App应用进行抓包&#xff0c;可以对App接口进行测试&#xff0c;也可以了解App传输中流量使用及请求响应情况&#xff0c;从而测试数据传输过程中流量使用的是否合理。 抓包过程&#xff1a; 01、Fiddler设置 启动Fiddler->Tools->Fiddler Options HT…

手机打开 第三方 “微信、快手、QQ、电话、信息” 等

前期回顾 Vue3 TS Element-Plus —— 项目系统中封装表格搜索表单 十分钟写五个UI不在是问题_vue3 封装table 配置表格-CSDN博客https://blog.csdn.net/m0_57904695/article/details/135538630?spm1001.2014.3001.5501 目录 &#x1f916; 下载App如下图所示&#xff1a;…