JVM快速调优手册v1.0之四:堆内存分配的CMS公式解析

    

.JVM 堆内存组成

Java堆由Perm区和Heap区组成,Heap区由Old区和New区(也叫Young区)组成,New区由Eden区、From区和To区(Survivor)组成。

JVM快速调优手册v1.0之四:堆内存分配的CMS公式解析
Eden
区用于存放新生成的对象。Eden中的对象生命不会超过一次Minor GC

Survivor Space  有两个,存放每次垃圾回收后存活的对象,即图的S0S1

Old Generation  Old区,也称老生代,主要存放应用程序中生命周期长的存活对象

.公式

EDENFrom
survivor
中的存活对象存入To
survivor
区时,To
survivor
区的空间不足,

再次晋升到old
gen
区,而old
gen
区内存也不够的情况下产生了promontion
faild
从而导致full
gc.
那可以推断出:eden+from
survivor < old gen
区剩余内存时,

不会出现promontion
faild
的情况。

:

(Xmx-Xmn)*(1-CMSInitiatingOccupancyFraction/100)>=(Xmn-Xmn/(SurvivorRatior+2))

进而推断出:

CMSInitiatingOccupancyFraction
<=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100

Xmx-Xmn:Old区大小。

CMSInitiatingOccupancyFraction/100:Old区百分之多少时,cms开始gc

1-CMSInitiatingOccupancyFraction/100: Old区开始gc回收时剩余空间百分比

(Xmx-Xmn)*(1-CMSInitiatingOccupancyFraction/100): Old区开始gc回收时剩余空间大小

(Xmn-Xmn/(SurvivorRatior+2)): eden+from survivor区的大小

.参数:

-Xmx :java heap最大值。建议均设为物理内存的80%。不可超过物理内存。

-Xmn:java heap最小值,一般设置为Xmx34分之一,等同于-XX:NewSize -XX:MaxNewSize  ,其实为young区大小

-XX:CMSInitiatingOccupancyFraction=70
:
使用cms作为垃圾回收使用70%后开始CMS收集。

-XX:SurvivorRatio=2: 生还者池的大小,默认是2

原创文章,作者:WTZYK,如若转载,请注明出处:http://www.wangzhanshi.com/n/18339.html

(0)
WTZYK的头像WTZYK
上一篇 2025年1月2日 12:48:47
下一篇 2025年1月2日 12:48:49

相关推荐

发表回复

登录后才能评论