日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時間:2024/4/15 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CMS(Concurrent Mark-Sweep)垃圾回收器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

http://www.iteye.com/topic/1119491

1.總體介紹:

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

2.CMS過程:

  • 初始標(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)記?:在這個階段,需要虛擬機停頓正在執(zhí)行的任務(wù),官方的叫法STW(Stop The Word)。這個過程從垃圾回收的"根對象"開始,只掃描到能夠和"根對象"直接關(guān)聯(lián)的對象,并作標(biāo)記。所以這個過程雖然暫停了整個JVM,但是很快就完成了。

并發(fā)標(biāo)記?:這個階段緊隨初始標(biāo)記階段,在初始標(biāo)記的基礎(chǔ)上繼續(xù)向下追溯標(biāo)記。并發(fā)標(biāo)記階段,應(yīng)用程序的線程和并發(fā)標(biāo)記的線程并發(fā)執(zhí)行,所以用戶不會感受到停頓。

并發(fā)預(yù)清理?:并發(fā)預(yù)清理階段仍然是并發(fā)的。在這個階段,虛擬機查找在執(zhí)行并發(fā)標(biāo)記階段新進入老年代的對象(可能會有一些對象從新生代晉升到老年代, 或者有一些對象被分配到老年代)。通過重新掃描,減少下一個階段"重新標(biāo)記"的工作,因為下一個階段會Stop The World。

重新標(biāo)記?:這個階段會暫停虛擬機,收集器線程掃描在CMS堆中剩余的對象。掃描從"跟對象"開始向下追溯,并處理對象關(guān)聯(lián)。

并發(fā)清理?:清理垃圾對象,這個階段收集器線程和應(yīng)用程序線程并發(fā)執(zhí)行。

并發(fā)重置?:這個階段,重置CMS收集器的數(shù)據(jù)結(jié)構(gòu),等待下一次垃圾回收。

?

CSM執(zhí)行過程:?

3.CMS缺點

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

總得來說,CMS回收器減少了回收的停頓時間,但是降低了堆空間的利用率。

4.啥時候用CMS

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

?

轉(zhuǎn)載于:https://www.cnblogs.com/ydxblog/p/8079134.html

總結(jié)

以上是生活随笔為你收集整理的CMS(Concurrent Mark-Sweep)垃圾回收器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。