<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    了解CMS(Concurrent Mark-Sweep)垃圾回收器

    1.總體介紹:

    CMS(Concurrent Mark-Sweep)是以犧牲吞吐量為代價(jià)來(lái)獲得最短回收停頓時(shí)間的垃圾回收器。對(duì)于要求服務(wù)器響應(yīng)速度的應(yīng)用上,這種垃圾回收器非常適合。在啟動(dòng)JVM參數(shù)加上-XX:+UseConcMarkSweepGC ,這個(gè)參數(shù)表示對(duì)于老年代的回收采用CMS。CMS采用的基礎(chǔ)算法是:標(biāo)記—清除。

    2.CMS過(guò)程:

    • 初始標(biāo)記(STW initial mark)
    • 并發(fā)標(biāo)記(Concurrent marking)
    • 并發(fā)預(yù)清理(Concurrent precleaning)
    • 重新標(biāo)記(STW remark)
    • 并發(fā)清理(Concurrent sweeping)
    • 并發(fā)重置(Concurrent reset)
    初始標(biāo)記 :在這個(gè)階段,需要虛擬機(jī)停頓正在執(zhí)行的任務(wù),官方的叫法STW(Stop The Word)。這個(gè)過(guò)程從垃圾回收的"根對(duì)象"開始,只掃描到能夠和"根對(duì)象"直接關(guān)聯(lián)的對(duì)象,并作標(biāo)記。所以這個(gè)過(guò)程雖然暫停了整個(gè)JVM,但是很快就完成了。
    并發(fā)標(biāo)記 :這個(gè)階段緊隨初始標(biāo)記階段,在初始標(biāo)記的基礎(chǔ)上繼續(xù)向下追溯標(biāo)記。并發(fā)標(biāo)記階段,應(yīng)用程序的線程和并發(fā)標(biāo)記的線程并發(fā)執(zhí)行,所以用戶不會(huì)感受到停頓。
    并發(fā)預(yù)清理 :并發(fā)預(yù)清理階段仍然是并發(fā)的。在這個(gè)階段,虛擬機(jī)查找在執(zhí)行并發(fā)標(biāo)記階段新進(jìn)入老年代的對(duì)象(可能會(huì)有一些對(duì)象從新生代晉升到老年代,或者有一些對(duì)象被分配到老年代)。通過(guò)重新掃描,減少下一個(gè)階段"重新標(biāo)記"的工作,因?yàn)橄乱粋€(gè)階段會(huì)Stop The World。
    重新標(biāo)記 :這個(gè)階段會(huì)暫停虛擬機(jī),收集器線程掃描在CMS堆中剩余的對(duì)象。掃描從"跟對(duì)象"開始向下追溯,并處理對(duì)象關(guān)聯(lián)。
    并發(fā)清理 :清理垃圾對(duì)象,這個(gè)階段收集器線程和應(yīng)用程序線程并發(fā)執(zhí)行。
    并發(fā)重置 :這個(gè)階段,重置CMS收集器的數(shù)據(jù)結(jié)構(gòu),等待下一次垃圾回收。  

    CSM執(zhí)行過(guò)程:
     


    3.CMS缺點(diǎn)

    • CMS回收器采用的基礎(chǔ)算法是Mark-Sweep。所有CMS不會(huì)整理、壓縮堆空間。這樣就會(huì)有一個(gè)問(wèn)題:經(jīng)過(guò)CMS收集的堆會(huì)產(chǎn)生空間碎片。 CMS不對(duì)堆空間整理壓縮節(jié)約了垃圾回收的停頓時(shí)間,但也帶來(lái)的堆空間的浪費(fèi)。為了解決堆空間浪費(fèi)問(wèn)題,CMS回收器不再采用簡(jiǎn)單的指針指向一塊可用堆空間來(lái)為下次對(duì)象分配使用。而是把一些未分配的空間匯總成一個(gè)列表,當(dāng)JVM分配對(duì)象空間的時(shí)候,會(huì)搜索這個(gè)列表找到足夠大的空間來(lái)hold住這個(gè)對(duì)象。
    • 需要更多的CPU資源。從上面的圖可以看到,為了讓應(yīng)用程序不停頓,CMS線程和應(yīng)用程序線程并發(fā)執(zhí)行,這樣就需要有更多的CPU,單純靠線程切換是不靠譜的。并且,重新標(biāo)記階段,為空保證STW快速完成,也要用到更多的甚至所有的CPU資源。當(dāng)然,多核多CPU也是未來(lái)的趨勢(shì)!
    • CMS的另一個(gè)缺點(diǎn)是它需要更大的堆空間。因?yàn)镃MS標(biāo)記階段應(yīng)用程序的線程還是在執(zhí)行的,那么就會(huì)有堆空間繼續(xù)分配的情況,為了保證在CMS回收完堆之前還有空間分配給正在運(yùn)行的應(yīng)用程序,必須預(yù)留一部分空間。也就是說(shuō),CMS不會(huì)在老年代滿的時(shí)候才開始收集。相反,它會(huì)嘗試更早的開始收集,已避免上面提到的情況:在回收完成之前,堆沒有足夠空間分配!默認(rèn)當(dāng)老年代使用68%的時(shí)候,CMS就開始行動(dòng)了。 – XX:CMSInitiatingOccupancyFraction =n 來(lái)設(shè)置這個(gè)閥值。
    總得來(lái)說(shuō),CMS回收器減少了回收的停頓時(shí)間,但是降低了堆空間的利用率。

    4.啥時(shí)候用CMS

    如果你的應(yīng)用程序?qū)νnD比較敏感,并且在應(yīng)用程序運(yùn)行的時(shí)候可以提供更大的內(nèi)存和更多的CPU(也就是硬件牛逼),那么使用CMS來(lái)收集會(huì)給你帶來(lái)好處。還有,如果在JVM中,有相對(duì)較多存活時(shí)間較長(zhǎng)的對(duì)象(老年代比較大)會(huì)更適合使用CMS。

    posted on 2012-01-03 20:31 paulwong 閱讀(747) 評(píng)論(0)  編輯  收藏 所屬分類: 性能優(yōu)化

    主站蜘蛛池模板: 日韩精品亚洲aⅴ在线影院| 中文字幕亚洲色图| 亚洲电影免费观看| 无码日韩精品一区二区免费暖暖| 一级做a爰片久久毛片免费陪 | 久久久受www免费人成| 亚洲精品午夜国产VA久久成人| 国产三级电影免费观看| 国产精品免费视频播放器| 全黄性性激高免费视频| 亚洲精品成人a在线观看| 国产成人亚洲精品狼色在线| 亚洲精品无码久久一线| 亚洲毛片基地日韩毛片基地 | 亚洲成a人无码av波多野按摩| 国产精品免费看香蕉| 日本免费的一级v一片| 亚洲国产精品人人做人人爽| 国产国拍亚洲精品福利| 亚洲av日韩av不卡在线观看| 国产精品亚洲mnbav网站| 在线亚洲午夜理论AV大片| 亚洲va在线va天堂va四虎| 亚洲人成人无码网www电影首页| 亚洲av无码潮喷在线观看 | 毛片免费观看网站| 国产大片免费网站不卡美女| 四虎影院免费在线播放| 国产自偷亚洲精品页65页| 亚洲免费福利在线视频| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲人成在线播放| 一级A毛片免费观看久久精品| 51视频精品全部免费最新| 午夜亚洲av永久无码精品| 久久亚洲AV成人无码电影| 狼色精品人妻在线视频免费| 91大神免费观看| 成人毛片免费观看视频在线 | 亚洲精品乱码久久久久66| 亚洲欧美日韩久久精品|