您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

关于垃圾收集器Parallel Scavenge的GCTimeRatio参数的理解

时间:2022-03-29 09:13:27  来源:  作者:程序员xiao熊

最近在看JVM垃圾收集相关的内容,发现了《深入理解JAVA虚拟机》的描述不太容易理解;原文如下:

GCTimeRatio参数的值应当是一个大于0且小于100的整数,也就是垃圾收集时间占总时间的比率,相当于是吞吐量的倒数。如果把此参数设置为19,那允许的最大GC时间就占总时间的5%(即1/(1+19)),默认值为99,就是允许最大1%(即1/(1+99))的垃圾收集时间。

而书中吞吐量的公式为:吞吐量=用户程序的运行时间/ (垃圾收集时间 + 用户程序的运行时间);和上面提到的计算公式不匹配;所以感觉这里的描述是有问题的;后来查询官方文档:The Parallel Collector,官方关于GCTimeRatio的描述如下:

Throughput: The throughput goal is measured in terms of the time spent doing garbage collection versus the time spent outside of garbage collection, referred to as Application time. The goal is specified by the command-line option -XX:GCTimeRatio=<N>, which sets the ratio of garbage collection time to application time to 1 / (1 + <N>)

For example, -XX:GCTimeRatio=19 sets a goal of 1/20 or 5% of the total time in garbage collection. The default value is 99, resulting in a goal of 1% of the time in garbage collection

描述中有一句话比较关键:which sets the ratio of garbage collection time to application time to 1 / (1 + <N>); which指代GCTimeRatio参数,后面的描述说明可以通过这个参数计算垃圾收集时间占用应用程序时间的比例,公式为 : 1/(1+ GCTimeRatio的值)。从字面上可以看出,GCTimeRatio的作用是为了计算垃圾收集的时间占用程序运行时间的值;而GCTimeRatio应该理解为用户程序的运行时间与垃圾收集时间的比例,即GCTimeRatio = userTime/GCTime, 其中userTime表示用户程序运行时间,GCTime表示垃圾收集程序运营时间;

下面进行验证

当GCTimeRatio=19时, 我们通过GCTimeRatio = userTime/GCTime(对参数进行假设的公式)可以得到userTime= 19GCTime, 再代入吞吐量计算公式:

公式1: 吞吐量=用户程序的运行时间/ (垃圾收集时间 + 用户程序的运行时间)

公式2:垃圾的运行时间/ (垃圾收集时间 + 用户程序的运行时间) + 吞吐量 = 1

代入公式1 可得 吞吐量 = userTime /(GCTime + userTime) --> 19GCTime / (GCTime + 19GCTime) --> 19/(1+19);

公式1的结果代入公式2,可得 垃圾收集的运行时间 / (垃圾收集时间 + 用户程序的运行时间) = 1- 吞吐量 = 1- [19/(1+19)] = 1/(1 + 19); 和官方描述的公式一致;

总上所述:GCTimeRatio应该理解为用户程序的运行时间与垃圾收集时间的比例,即GCTimeRatio = userTime/GCTime, 其中userTime表示用户程序运行时间,GCTime表示垃圾收集程序运营时间;



Tags:垃圾收集器P   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
关于垃圾收集器Parallel Scavenge的GCTimeRatio参数的理解
最近在看JVM垃圾收集相关的内容,发现了《深入理解java虚拟机》的描述不太容易理解;原文如下:GCTimeRatio参数的值应当是一个大于0且小于100的整数,也就是垃圾收集时间占总时间的...【详细内容】
2022-03-29  Search: 垃圾收集器P  点击:(507)  评论:(0)  加入收藏
▌简易百科推荐
Meta如何将缓存一致性提高到99.99999999%
介绍缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从硬件缓存到操作系统、网络浏览器,尤其是后端开发。对于Meta这样的公司来说,缓存尤为重要,因为它有助于减少延迟、扩...【详细内容】
2024-04-15    dbaplus社群  Tags:Meta   点击:(1)  评论:(0)  加入收藏
SELECT COUNT(*) 会造成全表扫描?回去等通知吧
前言SELECT COUNT(*)会不会导致全表扫描引起慢查询呢?SELECT COUNT(*) FROM SomeTable网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小...【详细内容】
2024-04-11  dbaplus社群    Tags:SELECT   点击:(1)  评论:(0)  加入收藏
10年架构师感悟:从问题出发,而非技术
这些感悟并非来自于具体的技术实现,而是关于我在架构设计和实施过程中所体会到的一些软性经验和领悟。我希望通过这些分享,能够激发大家对于架构设计和技术实践的思考,帮助大家...【详细内容】
2024-04-11  dbaplus社群    Tags:架构师   点击:(2)  评论:(0)  加入收藏
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(5)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(9)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(16)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(13)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(9)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(14)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(10)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条