垃圾回收算法是GC的方法論,垃圾收集器就是內存回收的具體實現。算法
1、Serial 收集器服務器
單線程收集器,在進行GC時,必須暫停全部的工做線程(Stop The World),直到GC收集結束。多線程
缺點:「Stop The World」給用戶帶來了很差的體驗併發
優勢:簡單而高效,Serial沒有其餘線程交互的開銷,專心作GC能夠得到最高的單線程收集效率。spa
適用於Client模式下的虛擬機是個很好的選擇。線程
2、ParNew 收集器對象
ParNew收集器就是Serial收集器的多線程版本,適用於Service模式下的新生代收集器。內存
ParNew在單核CPU環境中絕對不會有比Serial收集器更好的效果。可是多核CPU,GC效果仍是不錯的。 ci
3、Parallel Scavenge 收集器資源
Parallel Scavenge 收集器也是一個新生代收集器,使用複製算法,同時也是一個並行的多線程收集器。
Parallel Scavenge 收集器的目標則是達到一個可控制的吞吐量。
注:吞吐量 =用戶運行代碼時間 / (運行代碼時間 + 垃圾收集時間)
吞吐量高則能夠最高效率的利用CPU時間,儘快的完成程序的運算任務,主要適用於後臺運算二不須要太多的交互任務。
4、Serial Old 收集器
Serial Old 收集器是Serial收集器的老年代版本,單線程收集器,使用「標記-整理」算法。
5、Parallel Old 收集器
Parallel Old 收集器是Parallel Scavenge收集器的老年代版本,使用多線程和「標記-整理」算法。
6、CMS 收集器
CMS(Concurrent Mark Sweep)收集器是一種以獲取最短停頓時間爲目標的收集器。目前很大一部分Java應用程序都集中是在互聯網或B/S系統的服務器上,這類應用尤爲重視服務器的響應速度,但願系統停頓時間最短,給用戶最好的體驗。整個過程分爲四步:
其中初始標記、從新標記仍是須要「Stop The World」.CMS收集器的內存回收過程與用戶線程併發執行。
優勢是併發收集、低停頓
缺點:1)CMS收集器對CPU資源很是敏感;在併發階段雖然不會致使用戶線程停頓,可是會由於佔用了一份線程而致使應用程序變慢,總吞吐量下降。
2)CMS併發清除階段用戶線程還在運行,伴隨線程運行產生的新的垃圾出如今標記過程之後,CMS沒法在本次收集中處理掉它們,只能留到下次GC。這一部分垃圾就是「浮動垃圾」。
3)CMS是一款「標記-清除」算法實現的收集器,收集過程會產生大量的空間碎片。空間碎片過多,將會給較大對象沒法分配內存,從而觸發一次 Full GC.
7、G1 收集器
G1(Garbage First)收集器相比於CMS改進有:
(1)G1基於「標記-整理」算法實現收集器,即它不會產生大量的空間碎片,這對於長時間的應用系統很是重要。
(2)能夠很是準確的控制停頓,既能讓使用者明確指定一個長度爲M毫秒的時間片斷內,消耗在垃圾收集上的時間不超過N毫秒。G1將Java堆(包括新生代、老年代)劃分爲多個大小固定獨立區域,而且跟蹤這些區域裏面的垃圾堆積程度,在後臺維護一個優先列表,每次根據容許的收集時間,優先回收垃圾最多的區域。