Concurrent mark sweep(CMS)收集器是一種年老代垃圾收集器,其最主要目標(biāo)是獲取最短垃圾 回收停頓時(shí)間,和其他年老代使用標(biāo)記-整理算法不同,它使用多線程的標(biāo)記-清除算法。
最短的垃圾收集停頓時(shí)間可以為交互比較高的程序提高用戶體驗(yàn)。
CMS 工作機(jī)制相比其他的垃圾收集器來說更復(fù)雜,整個(gè)過程分為以下 4 個(gè)階段:
- 初始標(biāo)記
只是標(biāo)記一下 GC Roots 能直接關(guān)聯(lián)的對(duì)象,速度很快,仍然需要暫停所有的工作線程。
- 并發(fā)標(biāo)記
進(jìn)行 GC Roots 跟蹤的過程,和用戶線程一起工作,不需要暫停工作線程。
- 重新標(biāo)記
為了修正在并發(fā)標(biāo)記期間,因用戶程序繼續(xù)運(yùn)行而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分對(duì)象的標(biāo)記 記錄,仍然需要暫停所有的工作線程。
- 并發(fā)清除
清除 GC Roots 不可達(dá)對(duì)象,和用戶線程一起工作,不需要暫停工作線程。由于耗時(shí)最長的并 發(fā)標(biāo)記和并發(fā)清除過程中,垃圾收集線程可以和用戶現(xiàn)在一起并發(fā)工作,所以總體上來看 CMS 收集器的內(nèi)存回收和用戶線程是一起并發(fā)地執(zhí)行。