一悟泵、Serial收集器
單線程收集器,只會使用一條垃圾收集線程去完成垃圾收集工作闪水,在進(jìn)行垃圾收集工作的時候糕非,必須暫停其他所有的工作線程(Stop The World),直到收集結(jié)束球榆。
-XX:+UseSerialGC -XX:+UseSerialOldGC
二朽肥、Parallel Scavenge收集器
Parallel收集器其實就是Serial收集器的多線程版本,除了使用多線程進(jìn)行垃圾收集外持钉,其余行為(控制參數(shù)衡招、收集算 法、回收策略等等)和Serial收集器類似每强。默認(rèn)的收集線程數(shù)跟cpu核數(shù)相同始腾,當(dāng)然也可以用參數(shù)(- XX:ParallelGCThreads)指定收集線程數(shù),但是一般不推薦修改空执。
Parallel Scavenge收集器關(guān)注點(diǎn)是吞吐量(高效率的利用CPU)浪箭。CMS等垃圾收集器的關(guān)注點(diǎn)更多的是用戶線程的停 頓時間(提高用戶體驗)。所謂吞吐量就是CPU中用于運(yùn)行用戶代碼的時間與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虛擬機(jī)第一款真正意義上的并發(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;