首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HotSpot JVM会动态改变年轻一代的大小吗?

HotSpot JVM会动态改变年轻一代的大小吗?
EN

Stack Overflow用户
提问于 2014-10-28 20:17:15
回答 2查看 1.1K关注 0票数 1

关于HotSpot JVM垃圾收集的一些问题。

我们有一个java进程在运行,选项是:

代码语言:javascript
复制
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
-Xloggc:/mnt/dfs/0/hdfs/logs/namenode.gc.log -XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC 
-XX:+CMSParallelRemarkEnabled -XX:-DisableExplicitGC -XX:+UseCMSCompactAtFullCollection 
-XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -server -Xmx92160m -Xms92160m 
-Xss256k -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15 -XX:+PrintTenuringDistribution

如您所见,最大堆大小约为90G。

根据this article,默认为NewRatio=2和SurvivorRatio=8。因此,Eden大小应为90G*1/3*8/10=24G,survivor大小应为90G*1/3*1/10=3G。

但实际上,当我使用jstat时:

代码语言:javascript
复制
sudo jstat -gcnew 37082
S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
48960.0 48960.0    0.0 5981.3 15  15 24480.0 391936.0  82332.7  13351 1379.450

伊甸园的大小只有390MB,幸存者的大小只有48MB。这导致了很多年轻的gc。

谁能告诉我为什么伊甸园这么小?

EN

回答 2

Stack Overflow用户

发布于 2014-10-31 07:13:29

伊甸园的大小只有它需要的大小。如果您生成更多短暂的垃圾,NewSize将会更大。

票数 2
EN

Stack Overflow用户

发布于 2014-10-31 08:47:53

从这里开始这个this Oracle docs

我可以理解当堆增大或缩小时,JVM必须重新计算新旧两代的大小以维护预定义的NewRatio。

NewSize和MaxNewSize参数控制新一代的最小和最大大小。

年轻一代相对于老一代的大小由NewRatio控制。例如,设置-XX:NewRatio=3意味着老一代和年轻一代之间的比例是1:3,eden和survivor空间的组合大小将是堆的第四。

要调整Java堆大小,请执行以下操作:

为年轻一代提供了大量的内存。默认值由NewRatio和-Xmx设置计算得出。

您是否可以尝试为NewSize设置一个值,看看是否会有所不同?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26608136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档