CMS默认新生代是多大? - 简书
CMS默认新生代是多大?
CMS默认新生代是多大?
转载请注明原创出处,谢谢!
如果读完觉得有收获的话,欢迎点赞加关注。
首先抛个问题给大家,看下面这段JVM参数
-Xmx2g -Xms2g -XX:+UseConcMarkSweepGC
大家猜一猜这样的JVM参数配置,新生代多大呢?心想这还不简单吗,NewRatio默认为2,也就是新生代与老年代的比例是1:2,那新生代大小应该是2M。真的是这样吗?
jmap堆的配置
结果居然是332.75M。
要说具体原因只能撸源码了。
我们从Arguments(是用来解析jvm参数)类的set_cms_and_parnew_gc_flags这个方法说起,看方法名也知道是对cms和parnew GC方式的参数设置。
MaxNewSize设置
可以看到里面有段MaxNewSize的设置(提示1),在MaxNewSize和NewRatio都是默认配置时,MaxNewSize值为preferred_max_new_size,preferred_max_new_size这又是什么呢?可以看提示2,align_size_up主要是字节对齐用的,可以不用关系细节,所以preferred_max_new_size主要取决于preferred_max_new_size_unaligned,我们再看提示3,preferred_max_new_size_unaligned的值为
MIN2(max_heap/(NewRatio+1), ScaleForWordSize(young_gen_per_worker * parallel_gc_threads)),也就是取max_heap/(NewRatio+1)和ScaleForWordSize(young_gen_per_worker * parallel_gc_threads)中较小的那个,max_heap/(NewRatio+1)这个我们都了解,ScaleForWordSize又是什么呢?
ScaleForWordSize
这里我们是64位的,align_size_down_这个也是字节对齐的,所以ScaleForWordSize返回值约为(x) * 13 / 10,也就是young_gen_per_worker * parallel_gc_threads*13/10,所以我们再看看young_gen_per_worker和parallel_gc_threads的取值,
young_gen_per_worker = CMSYoungGenPerWorker,CMSYoungGenPerWorker在另一块代码中有定义,跟硬件相关x86机器为64M,而parallel_gc_threads的值呢?
parallel_gc_threads =(ParallelGCThreads == 0 ? 1 : ParallelGCThreads),所以我们得看ParallelGCThreads
ParallelGCThreads
可知,ParallelGCThreads在没有设置的情况下会设置成parallel_worker_threads方法返回值,我们接着看parallel_worker_threads方法。
parallel_worker_threads
看上图1,2,3最终由3进行计算,ncpus是cpu的核数,测试机器是4核,所以ncpus为4,按照上面的计算,所以ParallelGCThreads为4。
所以绕了半天,ScaleForWordSize的值大约是64M * 4 * 13 / 10=332.8M,再做下对齐就得到332.75M了;max_heap/(NewRatio+1)的值为2M,而新生代的值取了较小的ScaleForWordSize,故为332.75M。不知道cms为什么要这么做?
看到上面的过程,是不是有点奔溃。既然新生代大小有不确定性,那还是手动设置下-XX:NewSize、 -XX:MaxNewSize或者-xmn,免得遇到一些奇怪的GC,让你大吃一惊。
欢迎关注微信公共号
就职于某大型互联网公司基础架构组,主要专注于RPC、消息领域等中间件研发。
转自 http://tech.meituan.com/g1.html 前言G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相...
简书 占小狼,转载请注明原创出处,谢谢! 为了满足高性能、低延迟的要求,大部分应用都采用CMS算法作为服务端的垃圾收集器,而在HotSpot的实现中,针对CMS算法,对于一些参数进行了一系列的重新定制,所以在使用-XX+:UseConcMarkSweepGC时,下面几点是需...
打开太慢,故转载,转自aryanet Cssandra garbage collector tuning has been a hot topic of discussion in the Cassandra user mailing list from time to t...
JVM系列三:JVM参数设置、分析 - redcreen - 博客园
http://www.cnblogs.com/redcreen/archive//2037057.html 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的...
原文施工中 Hotspot Architecture Hotspot虚拟机架构 JVM主要组件包括类加载器,运行时数据区和执行引擎。 Key Hotspot Components 关键组件 在进行性能调优时,主要关注虚拟机的三个组件。java堆保存着对象实例,由JVM启动时...
决心看完抗战史
闺蜜的前男友曾有过一段风光的日子,三十出头就赚了几百万,然后从夜总会经营转而投身于广告业,他自己不懂广告业务就放手交给别人去做,本人却流连于山水之间,做了一回潇洒的甩手掌柜。后来,广告公司经营惨淡,不出几年投资就在人员工资、办公室租金和各种税费中***消散了。说来也怪,他的人...
管理员二美:非常感谢亲爱的组长们参与好报写作群第七期的管理,感谢群友们配合组长的管理,相聚是缘,希望大家能够珍惜当下,快乐写作。现在大家来欣赏一下各位组长们的风采!(部分组长提供了个人微信号,大家想跟他们交朋友可以添加) 好报七期写作群一群的组长们: 1组长:张依依。(未经...
//手机短信修改用户的手机号//前端页面发送手机短信验证码代码$('.fasongyzm').click(function () {
var phone = $('#phones').val(); $.ajax({
url:&{:U('Public/replace_...
我岂能爱你, 爱,是一个卑鄙的字。 不能说出对你的感觉, 却又无法找到比它更好的字。 我岂能爱你, 我,是一个卑微的人, 无法忘掉对你情谊, 却眼睁睁的看着陌生。 我岂能爱你, 爱你不是开始,也不是结束, 爱你,邂逅的青春, 爱你,慢慢的老去。 我岂能爱你, 娶妻生子,生老...网红抖音泡面小食堂加盟费多少钱?【面条吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:18,878贴子:
网红抖音泡面小食堂加盟费多少钱?收藏
有木有→_→小哥哥***姐姐知道&(`^?)&呢?
「天猫七夕节」全球来电-买煮面机,家电满,美家2件75折,部分类目还可先享后付!「天猫七夕节」全球来电,因爱&惠&七夕,尽享大牌好货!
坐等回答啊
登录百度帐号