住房城鄉(xiāng)建設(shè)部辦公廳網(wǎng)站口碑營(yíng)銷公司
垃圾回收算法
理解 CMS回收器
三個(gè)基本操作
1.回收新生代(同時(shí)暫停所有的應(yīng)用線程)
2.運(yùn)行并發(fā)周期來(lái)清理老年代數(shù)據(jù)
3.如果有必要?jiǎng)tFULL GC壓縮老年代
當(dāng)發(fā)生新生代回收 ,
如果老年代沒有足夠的空間容納晉升的對(duì)象則執(zhí)行FULL GC,所有線程停止開始清理老年代中的垃圾對(duì)象
晉升失敗的原因還有可能是內(nèi)存存在碎片化而導(dǎo)致失敗
FULL GC 在JDK8中不是并發(fā)
當(dāng)元空間被填滿并需要回收,CMS不會(huì)回收元空間,如果填滿了需要full gc來(lái)處理未被任何引用的類
默認(rèn)情況下CMS不會(huì)回收元空間
針對(duì)并發(fā)模式失敗的優(yōu)化
優(yōu)化CMS目的是確保不會(huì)發(fā)生并發(fā) 模式失敗或者晉升失敗
并發(fā)模式失敗是因?yàn)镃MS清理老年代的速度不顧快,并發(fā)清理G1
執(zhí)行新生代回收,CMS計(jì)算出沒有足夠的空間容納晉升對(duì)象,所以先回收老年代
避免并發(fā)模式失敗:G1從這些現(xiàn)象中發(fā)現(xiàn)了優(yōu)化的方式
1.讓老年代空間大一點(diǎn)
2.更頻繁的運(yùn)行后臺(tái)線程清理
-XX:CMSInitiatingOccupancyFraction=N 默認(rèn)70%
-XX:+UseCMSInitiatingOccupancyOnly 默認(rèn)false
并發(fā)處理周期會(huì)在老年代的70%開始處理
3.使用更多的后臺(tái)線程
增加后臺(tái)線程公式
ConcGCThreads = (3 + ParallelGCThreads) / 4
tips:
避免并發(fā)模式失敗是實(shí)現(xiàn)CMS最佳性能的關(guān)鍵
避免失敗的最簡(jiǎn)單的方法也是最復(fù)雜的計(jì)算方法是增加堆的大小
調(diào)整提前啟動(dòng)并發(fā)后臺(tái)線程和增加后臺(tái)線程數(shù)量