簡(jiǎn)單分析java中CMS回收器
CMS(Concurrent Mark Sweep)回收器
它使用的是標(biāo)記清除算法,同時(shí)又是一個(gè)使用多線(xiàn)程并行回收的垃圾回收器。
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ā)重置是可以和用戶(hù)線(xiàn)程一起執(zhí)行的。因此它可以在應(yīng)用程序運(yùn)行過(guò)程中進(jìn)行垃圾回收。

根據(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回收過(guò)程中,默認(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í)間可能很長(zhǎng)。為了避免這種情況,預(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ā)線(xiàn)程數(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ù)
相關(guān)文章
Java鍵值對(duì)Pair的使用方式和操作實(shí)現(xiàn)
鍵值對(duì)是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它由一個(gè)唯一的鍵和與之關(guān)聯(lián)的值組成,本文就來(lái)介紹一下Java鍵值對(duì)Pair的使用方式和操作實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
解決springboot配置文件組解決自動(dòng)配置屬性無(wú)法注入問(wèn)題
在使用Spring Boot時(shí),可能會(huì)遇到配置文件屬性注入失敗的問(wèn)題,本文描述了一個(gè)案例,其中嘗試使用profile文件組指定不同環(huán)境下的配置文件,但遇到了屬性無(wú)法成功注入的情況,提供的解決辦法是將Spring Boot的版本號(hào)從2.2.0.RELEASE升級(jí)到2.4.02024-09-09
Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能
這篇文章主要介紹了Spring Boot 2.x 實(shí)現(xiàn)文件上傳功能,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
spring-spring容器中bean知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家分享了關(guān)于spring-spring容器中bean知識(shí)點(diǎn)總結(jié),有需要的朋友們可以學(xué)習(xí)下。2019-08-08
Nacos集群模式下服務(wù)無(wú)法注冊(cè)問(wèn)題
這篇文章主要介紹了Nacos集群模式下服務(wù)無(wú)法注冊(cè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01

