溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

簡單分析java中CMS回收器

發(fā)布時(shí)間:2020-08-31 07:54:30 來源:腳本之家 閱讀:127 作者:laozhang 欄目:編程語言

CMS(Concurrent Mark Sweep)回收器

它使用的是標(biāo)記清除算法,同時(shí)又是一個(gè)使用多線程并行回收的垃圾回收器。

CMS主要工作步驟

CMS工作時(shí)主要步驟有初始標(biāo)記、并發(fā)標(biāo)記、預(yù)清理、重新標(biāo)記、并發(fā)清除和并發(fā)重置。其中初始標(biāo)記和重新標(biāo)記是獨(dú)占系統(tǒng)資源的,而預(yù)清理、并發(fā)標(biāo)記、并發(fā)清除和并發(fā)重置是可以和用戶線程一起執(zhí)行的。因此它可以在應(yīng)用程序運(yùn)行過程中進(jìn)行垃圾回收。

簡單分析java中CMS回收器

根據(jù)標(biāo)記清除算法,初始標(biāo)記、并發(fā)標(biāo)記和重新標(biāo)記都是為了標(biāo)記出需要回收的對(duì)象。并發(fā)清理則是在標(biāo)記完成后,正是回收垃圾對(duì)象。并發(fā)重置是指在垃圾回收完成后,重新初始化CMS數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù),為下一次垃圾回收做好準(zhǔn)備。

在整個(gè)CMS回收過程中,默認(rèn)情況下,在并發(fā)標(biāo)記之后,會(huì)有一個(gè)預(yù)清理的操作(也可以設(shè)置參數(shù)-XX:CMSPrecleaningEnabled,不進(jìn)行預(yù)清理)。預(yù)清理是并發(fā)的,除了為正式清理做準(zhǔn)備和檢查以外,預(yù)清理還會(huì)嘗試控制一次停頓時(shí)間。由于重新標(biāo)記是獨(dú)占CPU的,如果新生代GC發(fā)生后立即觸發(fā)一次重新標(biāo)記,那么一次停頓時(shí)間可能很長。為了避免這種情況,預(yù)清理時(shí),會(huì)可以等待一次新生代GC的發(fā)生,然后根據(jù)歷史性能數(shù)據(jù)預(yù)測(cè)一下新生代GC可能發(fā)生的時(shí)間,然后在當(dāng)前時(shí)間和預(yù)測(cè)時(shí)間的中間時(shí)刻,進(jìn)行重新標(biāo)記。這樣,最大程度上避免新生代GC和重新標(biāo)記重合,盡可能減少一次停頓時(shí)間。

CMS主要參數(shù)設(shè)置

-XX:+UseConcMarkSweepGC啟用CMS回收器

-XX:ConcGCThreads 設(shè)置并發(fā)線程數(shù)量

-XX:CMSInitiatingOccupancyFraction 設(shè)置當(dāng)老年代使用率達(dá)到N時(shí),執(zhí)行一次CMS回收。

-XX:+UseCMSCompactAtFullCollection CMS在垃圾收集完成后,進(jìn)行一次碎片整理。

-XX:CMSFullGCsBeforeCompaction 設(shè)置當(dāng)進(jìn)行N次CMS回收后進(jìn)行一次內(nèi)存壓縮。

-XX:+CMSClassUnloadingEnabled 使用CMS機(jī)制回收Perm區(qū)Class數(shù)據(jù)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI