1.Serial收集器
進行垃圾收集時,需要暫停其他所有的工作線程(Stop the world),知道它完成收集工作。暫停所有工作線程帶來不良的用戶體驗,但由于其簡單而高效,Client模式下的虛擬機仍然是個很好的選擇。
2.ParNew收集器
Serial收集器的多線程版本,是許多運行在Server模式下的虛擬機首選的新生代收集器(一個原因是只有它才能與CMS收集器配合工作)。單CPU下效率比起Serial收集器沒有提高甚至由于存在線程交換開銷,還不如Serial收集器。
3.Parallel Scavenge收集器
其他收集器關注點在于盡可能縮短垃圾收集時用戶線程的停頓時間,而Parallel Scavenge收集器的關注點是達到一個可控的吞吐量(吞吐量=運行用戶代碼時間/垃圾收集時間)。停頓時間越短越適合與用戶交互的程序,提升用戶體驗,高吞吐量則可以高效利用CPU時間,適合后臺運算而不需要太多交互的任務。
-XX:MaxGCPauseMills 參數控制垃圾收集停頓時間,縮短時間的代價是新生代空間變小,垃圾收集隨之更加頻繁。
-XX:GCTimeRatio 參數是垃圾收集時間占總時間的比率,即吞吐量的倒數。
4.Serial Old收集器
Serial收集器的老年代版本。單線程收集器,使用“標記-整理”算法。
5.Pareallel Old收集器
Parallel Scavenge收集器的老年代版本。多線程收集器,使用“標記-整理”算法。
6.CMS(Concurrent Mark Sweep)收集器
采用“標記-清除”算法實現,整個過程包括4個步驟:初始標記、并發標記、重新標記和并發清除。其中初始標記和重新標記依然需要 Stop the world。
初始標記只是標記GC Roots能關聯到的對象,速度很快;并發標記進行GC Roots Tracing;重新標記是為了修正并發標記期間因用戶程序繼續運行而導致標記變動的對象的標記。
7.G1(Garbage First)收集器
面向服務器端的垃圾收集器。
新聞熱點
疑難解答