JVM快速調優手冊之四: 堆內存分配的CMS公式解析

JVM 堆內存組成

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

JVM快速調優手冊之四: 堆內存分配的CMS公式解析

Eden區用於存放新生成的對象。Eden中的對象生命不會超過一次Minor GC。Survivor Space 有兩個,存放每次垃圾回收後存活的對象,即圖的S0和S1。Old Generation Old區,也稱老生代,主要存放應用程序中生命週期長的存活對象ide

公式

將EDEN與From survivor中的存活對象存入To survivor區時,To survivor區的空間不足,再次晉升到old gen區,而old gen區內存也不夠的狀況下產生了promontion faild從而致使full gc.那能夠推斷出:對象

eden+from survivor < old gen區剩餘內存時,不會出現promontion faild的狀況。blog

即:生命週期

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

進而推斷出:it

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

參數 含義
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的三、4分之一,等同於-XX:NewSize 和 -XX:MaxNewSize ,其實爲young區大小
-XX CMSInitiatingOccupancyFraction=70 :使用cms做爲垃圾回收使用70%後開始CMS收集
-XX SurvivorRatio=2: 生還者池的大小,默認是2
相關文章
相關標籤/搜索