JVM快速調優手冊v1.0之四:堆記憶體分配的CMS公式解析

superjack2發表於2018-05-18
    

.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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30089851/viewspace-2120547/,如需轉載,請註明出處,否則將追究法律責任。

相關文章