JVM垃圾收集器

一、Serial收集器

單線程收集器,只會使用一條垃圾收集線程去完成垃圾收集工作,在進行垃圾收集工作的時候,必須暫停其他所有的工作線程(Stop The World),直到收集結(jié)束。

-XX:+UseSerialGC -XX:+UseSerialOldGC


二、Parallel Scavenge收集器

Parallel收集器其實就是Serial收集器的多線程版本,除了使用多線程進行垃圾收集外,其余行為(控制參數(shù)、收集算 法、回收策略等等)和Serial收集器類似。默認(rèn)的收集線程數(shù)跟cpu核數(shù)相同,當(dāng)然也可以用參數(shù)(- XX:ParallelGCThreads)指定收集線程數(shù),但是一般不推薦修改。
Parallel Scavenge收集器關(guān)注點是吞吐量(高效率的利用CPU)。CMS等垃圾收集器的關(guān)注點更多的是用戶線程的停 頓時間(提高用戶體驗)。所謂吞吐量就是CPU中用于運行用戶代碼的時間與CPU總消耗時間的比值。

Parallel Old收集器是Parallel Scavenge收集器的老年代版本。使用多線程和“標(biāo)記-整理”算法。在注重吞吐量以及 CPU資源的場合,都可以優(yōu)先考慮 Parallel Scavenge收集器和Parallel Old收集器(JDK8默認(rèn)的新生代和老年代收集 器)。

-XX:+UseParallelGC(年輕代),-XX:+UseParallelOldGC(老年代)


三、ParNew收集器

ParNew收集器其實跟Parallel收集器很類似,區(qū)別主要在于它可以和CMS收集器配合使用。

-XX:+UseParNewGC


四、CMS收集器

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標(biāo)的收集器。它非常符合在注重用戶體 驗的應(yīng)用上使用,它是HotSpot虛擬機第一款真正意義上的并發(fā)收集器,它第一次實現(xiàn)了讓垃圾收集線程與用戶線程 (基本上)同時工作。

# CMS的相關(guān)核心參數(shù)
1. -XX:+UseConcMarkSweepGC:啟用cms
2. -XX:ConcGCThreads:并發(fā)的GC線程數(shù)
3. -XX:+UseCMSCompactAtFullCollection:FullGC之后做壓縮整理(減少碎片)
4. -XX:CMSFullGCsBeforeCompaction:多少次FullGC之后壓縮一次,默認(rèn)是0,代表每次FullGC后都會壓縮一 次
5. -XX:CMSInitiatingOccupancyFraction: 當(dāng)老年代使用達(dá)到該比例時會觸發(fā)FullGC(默認(rèn)是92,這是百分比) 6. -XX:+UseCMSInitiatingOccupancyOnly:只使用設(shè)定的回收閾值(-XX:CMSInitiatingOccupancyFraction設(shè) 定的值),如果不指定,JVM僅在第一次使用設(shè)定值,后續(xù)則會自動調(diào)整
7. -XX:+CMSScavengeBeforeRemark:在CMS GC前啟動一次minor gc,目的在于減少老年代對年輕代的引 用,降低CMS GC的標(biāo)記階段時的開銷,一般CMS的GC耗時 80%都在標(biāo)記階段
8. -XX:+CMSParallellnitialMarkEnabled:表示在初始標(biāo)記的時候多線程執(zhí)行,縮短STW
9. -XX:+CMSParallelRemarkEnabled:在重新標(biāo)記的時候多線程執(zhí)行,縮短STW;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容