JVM快速调优手册之四:堆内存分配的CMS公式解析
JVM 堆内存组成
Java堆由Perm区和Heap区组成,Heap区由Old区和New区(也叫Young区)组成,New区由Eden区、From区和To区(Survivor)组成。
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的东洲网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
Eden区用于存放新生成的对象。Eden中的对象生命不会超过一次Minor GC。Survivor Space 有两个,存放每次垃圾回收后存活的对象,即图的S0和S1。Old Generation Old区,也称老生代,主要存放应用程序中生命周期长的存活对象
公式
将EDEN与From 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最小值,一般设置为Xmx的3、4分之一,等同于-XX:NewSize 和 -XX:MaxNewSize ,其实为young区大小 |
-XX | CMSInitiatingOccupancyFraction=70 :使用cms作为垃圾回收使用70%后开始CMS收集 |
-XX | SurvivorRatio=2: 生还者池的大小,默认是2 |
本文标题:JVM快速调优手册之四:堆内存分配的CMS公式解析
标题来源:http://scyanting.com/article/jgopdi.html