JVM - G1收集器、Region、停顿时间模型、垃圾回收(建议收藏)

news2025/8/7 3:10:42

编辑切换为居中

添加图片注释,不超过 140 字(可选)

Region

使用G1收集器时,java堆的内存会划分为多个大小相等的独立区域(Region),Region中也有新生代和老年代的概念,但是新生代和老年代不再是物理隔离的,它们都是一部分Region(不需要连续)的集合.

如下图所示:粉色的代表新生代,没有字母的是eden,有s的是survivor ,老年代是浅蓝的O,还有一个H是humongous,也是老年代。

我们在《JVM堆内存分配机制(建议收藏)》提过,大对象直接进入老年代,这个humongous就是存储大对象的,也就是说如果对象内存大小大于Region的一半大小,那就会给一个专门的Region存放,如果对象大于一个Region的大小,那就用多个Region存放。

编辑

添加图片注释,不超过 140 字(可选)

我们只画了16个Region,并不是说堆只分配了16个,在没有用-XX:G1HeapRegionSize去指定的情况下,默认是2048个,Region的个数必须是2的倍数,每个Region的大小在1到32M之间。

新生代的大小在5%到60%之间,可以通过-XX:G1NewSizePercent=5,-XX:G1MaxNewSizePercent=60来设置。

停顿时间模型

G1的另外一个特点,就是建立可预测的停顿时间模型。G1跟踪各个Region的回收价值,并在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region,保证了在有限的时间内获取尽可能高的收集效率,停顿时间默认200ms,用-XX:MaxGCPauseMillis设置。

比如下图,第一个新生代的Region回收10M需要5ms,第二个新生代的Region回收20M也只要5ms,第三个新生代的Region回收10M却需要10ms,如果指定他需要5ms内回收20M的垃圾,他会直接去回收第二个新生代的Region,而不是回收第一个和第三个新生代的Region。

编辑

添加图片注释,不超过 140 字(可选)

垃圾回收

新生代回收

上面提过,新生代的内存空间最多占用60%,当60%的空间用完的时候,就会触发新生代的回收。新生代的回收是用复制算法的,与之前不同的是,他会考虑到停顿时间。

老年代回收

老年代回收分为:初始标记、并发标记、最终标记、混合回收。

前面三个阶段跟《JVM - CMS垃圾收集器(建议收藏)》的前面三个类似。

混合回收,是说他并不会仅仅回收老年代的垃圾,也会回收新生代的垃圾,他会根据停顿时间,尽可能多回收Region。

由于在停顿时间内回收的垃圾可能不会很多,所以这个阶段会进行多次的混合回收,默认是8次,可以通过-XX:G1MixedGCCountTarget设置。

如果混合回收的时候,发现Region仅占有5%了,那他就会停止回收,不会一直回收8次。

混合回收的基于复制算法的,所以大对象的复制会比较耗时,如果某个老年代的Region超过85%的对象是存活的,那他不会被回收,通过-XX:G1MixedGCLiveThresholdPercent设置。

                         资源获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

 精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

每天学四小时:Java+Spring+JVM+分布式高并发,架构师指日可待

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

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

相关文章

Source Insight是一个面向项目开发的程序编辑器和代码浏览器丨产品简介

Source Insight是为大型、高要求的现实世界编程项目而设计的。事实上,今天,重要的技术公司正在使用Source Insight来开发一些最大、最成功的商业硬件和软件产品。 代码分析 Source Insight会在您工作时动态解析您的源代码并维护自己的符号信息数据库&a…

Redis实战篇(六)用户签到、UV统计

一、用户签到 1、BitMap用法 我们按月来统计用户签到信息,签到记录为1,未签订则记录为0。 把每一个bit位对应每月的一天,形成映射关系。用0和1标识业务状态,这种思路称为位图(BitMap)。 Redis中利用strin…

qt qml

QT Quick是QT提供的一种高级用户界面工具包,包含对QML完美支持. Qt Quick 就是使用 QML 构建的一套类库。 Qml模块本身并没有涉及图形显示,所有的图形处理都由Qt Quick模块完成。 QMl是一种高效的开发UI 的语言。QML(Qt Meta-Object Languag…

对接建行支付

前两篇文章介绍了对接微信支付和农行支付的方法,这篇文章介绍一下建行支付。 使用场景: 在微信公众号中调用微信付款,或者公众号内页面调用龙支付或者H5页面支付。 一、微信支付 参考建行给的接口文档 交易流程如下: 按照接口要求…

sync_binlog和innodb_flush_log_at_trx_commit的区别

innodb_flush_log_at_trx_commi 这个指的是写redo及后续操作,ib_logfile这个文件的刷新方式。 sync_binlog纯粹指的是binlog ,如 mysql-bin0003等。 基于innodb_flush_log_at_trx_commit 的三个参数的解释。 Innodb_flush_log_at_trx_commit 0 redolo…

代码随想录59——单调栈:503下一个更大元素II、42接雨水

文章目录1.503下一个更大元素II1.1.题目1.2.解答2.42接雨水2.1.题目2.2.解答2.2.1.双指针for循环解法2.2.3.单调栈解法1.503下一个更大元素II 参考:代码随想录,503下一个更大元素II;力扣题目链接 1.1.题目 1.2.解答 做本题之前建议先做 73…

Spring Boot 集成freemarker模板引擎

前言 J2EE的领域中包含5大引擎,分别为模板引擎、流程引擎、搜索引擎、规则引擎、报表引擎。每种引擎都能解决某一方面的问题,模板引擎解决的是用户界面与业务数据分离,流程引擎解决的是驱动业务按照一定的流程执行,搜索引擎解决的…

局部线性分析(机器学习)

目录 局部线性嵌入(LLE) 局部线性嵌入(LLE)算法的主要步骤分为三步 效果如下 局部线性嵌入(LLE) 局部线性嵌入(LLE)是一种非线性降维算法 它能够使降维后的数据较好地保持原有流…

大学生HTML个人网页作业作品:基于html css实现围棋网页(带报告4800字)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

动静态链接动静态库制作与使用

前置知识 程序的编译与链接:动静态库属于程序链接阶段的概念,如果对程序的编译链接过程不太熟悉,可以先看一下着篇文章gcc&动静态链接:这篇文章讲解了如何在Linux环境下用gcc完成编译链接的每一步操作 链接库 在链接的过程…

Java对象内存结构和创建过程

文章目录对象的内存布局对象头Mark WordKlass Pointer实例数据对齐数据对象的创建总结对象的内存布局 我们的对象一般存储在我们的堆内存中,我们把实例对象可以划分为对象头,实例数据,对齐填充 对象头(object header&#xff09…

SpringBoot+Vue项目流浪狗领养管理系统的设计与实现

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JDK版…

图像运算和图像增强十

图像运算和图像增强十 图像锐化之 Sobel、Laplacian 算子实现边缘检测 (1)Sobel算子(一阶微分算子) Sobel算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导。该算子用于计算图像明暗程度近似值,根据图像边缘旁…

top命令应用(查看进程实时动态信息)

记录:321 场景:在CentOS 7.9操作系统上,top命令是查看进程实时动态信息工具。查看进程状态、进程使用内存状况、进程使用CPU状况、进程PID等。 版本: 操作系统:CentOS 7.9 1.top命令介绍 top命令,查看…

内存、指针与数组

C语言的指针可以当成一个特殊的数据类型(像int一样的数据类型),可以说其唯一的作用就是为了存储地址,其他的都可以当作它的衍生用法。 指针的诸多功能都是基于其能直接操作指定内存空间存储的值,每个程序运行都会由操作…

git新建仓库提交项目代码+常用命令

一:新建仓库 输入一下仓库名称,归属和路径都是生成的不需要自己去编辑 点击创建就创建了一个新的仓库,下面就是仓库刚创建好的样子 二:向仓库里提交项目代码 首先打开你要提交的项目文件: 根据官方的提示去提交代码&…

Linux:shell编程2(内含:1.设置环境变量+2.位置参数变量+3.预定义变量+运算符+4.条件判断)

写在开头: 小技巧:除了赋值不加空格,其他的,例如是[ ] ()等都需要空格! 1.设置环境变量: 注:类似于C语言全局变量 案例1:在/etc/profile文件中定义TOMCAT_HOME环境变量。 解释&…

洛谷 模拟 普及-

文章目录💥前言😉解题报告💥一、快乐水🤔一、题意及思路:😎二、源码:😮三、代码分析:💥二、漂亮的绝杀🤔一、题意及思路:😎二、源码:&…

小学生python游戏编程arcade----坦克大战2

小学生python游戏编程arcade----坦克大战2前言多摄象头显得分,title地图加载,精灵分层管理,移动精灵1、提示框制作1.1养眼绿色1.2 画距形提示框1.3 效果图1.4 提示框加提示2、子弹计数问题2.1 初始时给一定的子弹量2.2 发射子弹时进行控制2.3…

hevc 半像素

1 分数像素精度运动估计 物体在连续帧间的运动是连续的,而像素本身是离散的,这种现象带来了一个问题,当前帧中图像块的最佳参考块不一定位于参考帧的证书像素点位置,为了更加精确的预测当前带编码的图像块,有必要在非整…