JVM篇之牛刀小试(三)年轻代参数优化探索

news2025/1/9 17:10:24

前言


在JVM 篇之 牛刀小试 (一)我们谈到了关于年轻代参数的问题,就是当我没有设置-Xmn的时候,gc时间居然比我设置了500m的时候,时间还短,然后当时我就停止了探索。

后来我在公司飞书文档写了一篇文章分享,然后有位公司leader在我文章评论了,一下子引起了我的好奇心去探索:既然年轻代设置过大的时候,gc时间比较长;过小的时候,gc次数又比较多;那么如何保持他们之间平衡呢?

image.png

我认为一个好文章,需要引起读者还有大家的思考以及火花的碰撞,这才是它的意义所在。

那么下面我们一起进去探索一下吧~

image.png

G1 年轻代默认大小

经过查阅资料,发现如果不设置大小,年轻代会从堆4%到60%,进行波动,我们在本地进行演示一遍

image.png

在一开始接近200m的时候,就进行垃圾回收,按照默认配置年轻代会在40m~614m范围进行调整,我们看回上一张图的年轻代的容量600m,刚好是60%,我们当时设置堆的大小是1g,那么这个范围就是40m ~ 614m之间,这就验证了G1会根据gc时间进行调整年轻代的大小。

弊端:我们可以看到在机器刚刚启动的时候就进行34次的回收,因为它是在一个比较小的空间4%开始垃圾回收,然后再慢慢扩大,所以看到它的垃圾回收次数是比较多的,ygc的时间其实不长。

那么如何保持gc次数跟gc时间相对平衡呢?

image.png

探索年轻代gc次数跟时间平衡

经过查阅知乎相关文章,里面提到年轻代跟老年代最好的比例大概是1:2,为了将更多的对象留在老年代,其次减少fullgc的次数。那么我们堆的大小1g,按照这样的算法,年轻代333m,我们扩大一点到350m,给它点扩展的空间~

image.png

效果: ygc次数14次,比34次少很多,ygc时间比之前相差0.0几秒,这个是我们能接受的范围。这是机器刚刚启动那会。那么当跑一段时间后,如何来保证gc时间相对比较快呢?

借助 -XX:MaxGCPauseMillis 参数,默认是200ms,它的意义是告诉G1 垃圾回收时间控制在这个时间范围,G1通过gc时间来调整年轻代大小。那么我们可以通过这个参数来控制gc时间(并不是绝对在这个时间范围内),添加参数 -XX:MaxGCPauseMillis=150

总结

最后我们年轻代参数-Xmn350m -XX:MaxGCPauseMillis=150,前一个参数减低ygc的频率,后面的参数告诉G1垃圾回收器,你将gc时间控制在150毫秒进行回收,到此我们基本找到gc次数跟gc时间的一个相对平衡。

image.png

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

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

相关文章

Java的注解和注解解析器是什么,运行方法如何,架构师必会知识体系

文章目录什么是[元数据](https://so.csdn.net/so/search?q元数据&spm1001.2101.3001.7020)(metadata)什么是注解(Annotation)?元注解自定义注解注解处理器什么是元数据(metadata) ​ 元数据由metadata译来,所谓的元数据就是“关于数据的数据”,更通俗的说就是…

网络篇汇总

路由器:属于网关设备,通过路由器可以将各种局域网、城域网、广域网连接起来,一般工作于网络层。它会根据信号的情况自动选择和设定路由,以最佳路径,按照前后顺序发送信号。路由器可连接多个逻辑上分开的网络&#xff0…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java随骑共享系统m7i8o

要对当前自己的学校对于计算机毕业设计的要求以及严格程度有所了解,这个主要是借助上一届已经毕业的学长学姐了解一下,但是有一点要注意的是,对于每一届毕业生的毕业设计的处理,学校都有很大的调整,这一点尤其重要。其…

静态HTML个人博客主页 简单个人网页设计作业 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页设计作业

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

力扣(LeetCode)139. 单词拆分(C++)

字符串哈希&动态规划 一眼暴力,发现根本做不了,想着想着,发现 dpdpdp 很好想,来试试。 枚举字符串 sss 的所有位置作为起始点,如图状态转移。 规定 : f[0]f[0]f[0] 表示空字符的集合,可以用空串组成…

【数据结构与算法】模拟实现LinkedList类

文章目录LinkedList简介头插法创建链表尾插法创建链表任意位置插入,第一个数据节点为0号下标查找是否包含关键字key是否在链表当中删除第一次出现关键字为key的节点删除所有值为key的节点得到链表的长度打印链表清空链表完整代码:总结:LinkedList简介 Java LinkedLi…

SAP PS 第6节 项目产成品产出

SAP PS 第6节 项目产成品产出及差异处理1 模拟场景说明1.1 拖拽负库存1.2 发料原材料及报工1.3 执行副产品入库migo发预留1.4 CNS0交货1.5 后面开票产生收入按照项目结算即可项目上有一类比较另类的玩法,就是舍弃PP,依靠网络活动的负库存,实现…

Android Edittext密码类型显示字符串修改实现

Android Edittext密码类型显示字符串修改实现 文章目录Android Edittext密码类型显示字符串修改实现一、前言:二、效果三、实现1、系统级设置2、应用级设置3、单个EditText设置(1)自定义显示符合类(2)EditText使用自定…

认识一下 Kubernetes 多集群服务 API

由于各种原因,采用 Kubernetes 的企业内部存在着几个、几十甚至上百个集群。比如处于研发流程上的考虑,不同环境下都存在独立的集群;监管层面的考虑,就地存储的用户数据需要搭配应用集群;单个集群的容量限制&#xff0…

(四)Redis的持久化

一 什么是redis持久化 因为Redis数据是基于内存读写,为防止Redis服务器关闭或者宕机造成数据的丢失,我们通常需要对redis做持久化,即:把内存中的数据(命令)保存一份到磁盘中来做一份备份,当redis服务关闭或宕机后,在Redis服务器重启后将数据从磁盘加载到内存中,不至于造成数据…

一招教你轻松使用公网远程访问公司内网

企业远程访问需求 众多企业都会在总部搭建各类项目管理办公系统(如OA、ERP、CRM、财务系统等等),以提高员工的办公及管理效率。 不少出差在外或者居家办公的员工需要从外部网络访问内网来登录各类系统,以满足办公协作管理的需…

电容笔和触控笔有啥区别?双十二质量好的电容笔推荐

从导电材料、作用机理、用途等方面,电容笔与普通触控笔相比有很大的不同。电容笔的笔尖尺寸适中,笔尖材质一般比较耐用。随着科技的进步,人们的生活水准不断提高,无论是绘制图纸,或是会议纪要,都需要一款更…

(附源码)ssm教学成绩管理系统 毕业设计 282029

教学成绩管理系统的设计与实现 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Jav…

大学生圣诞网页设计制作成品 圣诞节静态HTML网页作业作品 简单DIV CSS布局网站

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

树的企业应用-哈夫曼编码树-有趣的数据压缩算法

树的企业应用-哈夫曼编码树-有趣的数据压缩算法 哈夫曼编码 描述 张三去李四家里,但 李四是一个女生,所以张三找李四去上海迪尼斯玩 … 亚历山大.张三去伊丽莎白.李四家里,但 伊丽莎白.李四是一个女生,所以亚历山大.张三找伊丽莎白.李四去美国迪尼斯玩 … 我们发现 一个关键…

C++中STL用法超详细总结(收藏级)

1 什么是STL? STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C程序库。它被容纳于C标准程序库(C Standard Library)中,是ANSI/ISO C标准中最…

密码学(1)RSA与AES算法原理

什么是RSA 在1977年,Ron Rivest, Adi Shami和Leonard Adleman这三个人开发了一个新的算法,并用他们三个名字的首字母来命名这个算法,这个算法名叫RSA 非对称加密与对称加密 RSA算法采用的是非对称加密,假如我有你的公钥&#x…

从零到一手写一个小型RPC框架——介绍篇

RPC框架介绍 RPC框架是微服务的通信工具,其涉及到网络传输、服务注册、序列化、代理模式等等知识的学习与使用,是微服务的入门框架。 现有的比较知名的RPC框架有阿里巴巴开源的Dubbo,谷歌的开源RPC框架gRPC,甚至SpringCloud中所…

vue2笔记4(服务代理、插槽、vuex、路由)

vue脚手架 ## vue脚手架配置代理 vue在请求服务器的资源的时候,自身使用的是8080端口,如果服务器端口号是别的,这时候直接访问的话就会出现跨域的问题无法访问,就需要使用一个代理来访问服务器。vue配置脚手架的代理有两种方式。…

Unreal Engine学习

1,什么是组件? 继承于Uobject的为了给actor以及其他在场景中显示出来的类增加新的功能的一个东西 2,可以自己创建一个蓝图,然后将蓝图拖到场景中,也可以直接在c class中将蓝图拖到场景中 3,创建一个组件&…