当前位置: 首页 > article >正文

一文讲解JVM中的G1垃圾收集器

接上一篇博文,这篇博文讲下JVM中的G1垃圾收集器

G1在JDK1.7时引入,在JDK9时取代了CMS成为默认的垃圾收集器;

在这里插入图片描述
G1把Java堆划分为多个大小相等的独立区域Region,每个区域都可以扮演新生代(Eden和Survivor)或老年代的角色;同时,G1还有一个专门为大对象设计的Region,叫Humongous区。

  • 补充:大对象的判定的规则是,如果一个大对象超过了一个Region大小的50%,比如每个Region是2M,只要一个对象超过了1M,就会被放入Humongous中;

这种区域化管理使得G1可以更灵活地进行垃圾收集,只回收部分区域而不是整个新生代或老年代;

那么,讲下G1收集器的大致运行过程吧;
大致可分为:

  1. 并发标记,G1通过并发标记的方式找出堆中的垃圾对象。并发标记阶段与应用线程同时执行,不会导致应用线程暂停;

  2. 混合收集,在并发标记完成后,G1会计算出哪些区域的回收价值最高(也就是包含最多垃圾的区域),然后优先回收这些区域。这种回收方式包括了部分新生代区域和老年代区域。

    选择回收成本低而收益高的区域进行回收,可以提高回收效率和减少停顿时间;

  3. 可预测的停顿,G1在垃圾回收期间仍然需要STW,不过,G1在停顿时间上添加了预测机制,用户可以JVM启动时指定期望停顿时间,G1会尽可能地在这个时间内完成垃圾回收;

在这里插入图片描述
接下来,探讨对比下,为什么有了CMS,还要引入G1呢?
给出一张对比的表来回答这个问题吧!

特性CMSG1
设计目标低停顿时间可以预测的停顿时间
并发性
内存碎片是,容易产生碎片否,通过区域划分和压缩减少碎片
收集代数年轻代和老年代整个堆,但区分年轻代和老年代
并发阶段并发标记、并发清理并发标记、并发清理、并发回收
停顿时间预测较难预测可配置停顿时间目标
容易出现的问题内存碎片,Concurrent Mode Failure较少出现长时间停顿

由此对比,我们可以知道:

  • CMS适用于对延迟敏感的应用场景,主要目标是减少停顿时间,但容易产生内存碎片。
  • G1则提供了更好的停顿时间预测和内存压缩能力,适用于大内存和多核处理器环境。

http://www.kler.cn/a/521478.html

相关文章:

  • S4 HANA明确税金本币和外币之间转换汇率确定(OBC8)
  • AI时序预测: iTransformer算法代码深度解析
  • Unity 粒子特效在UI中使用裁剪效果
  • 网络工程师 (7)进程管理
  • 【信息系统项目管理师-选择真题】2007下半年综合知识答案和详解
  • 【机器学习】自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
  • 什么是vue.js组件开发,我们需要做哪些准备工作?
  • 洛谷题目: P2188 小Z的 k 紧凑数 (本题较难,省选-难度)题解
  • 深度学习:基于MindNLP的RAG应用开发
  • Python Typing: 实战应用指南
  • 安装Office自定义项,安装期间出错
  • 力扣算法题——11.盛最多水的容器
  • Synology 群辉NAS安装(5)介绍一下NAS的体系和安装container manager
  • 第三节 MATLAB基本语法
  • SuperMap GIS基础产品FAQ集锦(20250127)
  • 美国公司有意收购TikTok(抖音)
  • Linux——冯 • 诺依曼体系结构
  • 834 数据结构(自用)
  • 26.日常算法
  • Mybatis——sql映射文件中的增删查改
  • Maven运行任何命令都报错“Internal error: java.lang.ArrayIndexOutOfBoundsException”
  • 作业四:简述mysql 主从复制原理及其工作过程,配置一主两从并验证。
  • 科普篇 | “机架、塔式、刀片”三类服务器对比
  • 理解离散傅里叶变换(三.复数) 2025 1 26
  • leetcode 2412. 完成所有交易的初始最少钱数
  • 【前端】Electron入门开发教程,从介绍Electron到基础引用以及部分深度使用,附带常见的十个报错问题的解决方案和代码优化。