垃圾收集器:若是說收集算法是內存回收的方法論,垃圾收集器就是內存回收的具體實現。java
##Serial收集器:是虛擬機新生代收集的惟一選擇。單線程的收集器他,它在進行垃圾收集時,必須暫停其餘全部的工做線程,直到它收集結束。簡單而高效。Serial收集器對於運行在Client模式下的虛擬機來講是一個很好的選擇。
##ParNew收集器:就是Serial收集器的多線程版本。除了使用多條線程進行垃圾收集以外,基本徹底同樣。但它倒是許運行在Server模式下的虛擬機中首選的新生代收集器,只有它能夠與CMS收集器配合工做。
##Parallel Scavenger收集器:是新生代收集器,複製算法的收集器,並行的多線程收集器,目標則是達到一個可控的吞吐量,所謂的吞吐量就是CPU用於運行用戶代碼的時間與CPU總耗時間的比值。高吞吐量則能夠最高效率的利用CPU時間,儘快的完成程序的運算任務,主要適合在後臺運算而不須要太多交互的任務。
Serial Old收集器:老年代,單線程收集器,使用標記整理算法。也是被Client模式下的虛擬機使用。
Parallel Old收集器:是Parallel Scavenge收集器的老年版本,使用多線程「標記整理」算法。"吞吐量優先",在注重吞吐量及CPU資源敏感的場合,均可以優先考慮Parallel Scavenge加Parallel Old收集器。
CMS收集器:是一種以獲取最短回收停頓時間爲目標的收集器,基於"標記清除",比較符合--重視服務的響應速度,但願系統停頓時間最短,給永不帶來較好的體驗。四步:初始標記,併發標記,從新標記,併發清除--初始標記和從新標記仍然須要「Stop The Word」,初始標記僅僅只是標記一下GC Roots能直接關聯到的對象,速度很快,併發標記階段就是進行GC Roots Tracing 的過程,而從新標記階段則是爲了,修正併發標記期間,因用戶程序繼續運做而致使的標記產生變更的那一部分對象標記記錄,這個階段的停頓時間通常比初始換標記階段稍長一些,但遠比並發標記的時間短。**併發收集,低停頓,CMS收集器對CPU資源很是敏感。默認啓動的回收線程數(CPU數量+3)/4。
I-CMS:增量式併發收集器,就是在併發標記和併發清理的時候讓GC線程,用戶線程交替運行,儘可能減小GC線程的獨佔資源的時間,這樣整個垃圾收集的過程會更長,可是對用戶的影響就會明顯少一些。
CMS 收集器沒法處理浮動垃圾,可能出現。
G1收集器:一是G1收集器是基於「標記整理算」算法實現的收集器,不會產生空間碎片,二是它能夠很是精準地控制停頓,即能讓使用者明確在一個長度爲M毫秒的時間片斷內,消耗在垃圾收集上的時間不得超過N毫秒,這幾乎已是實時java(RTSJ)的垃圾收集器的特徵了。G1將整個Java堆(包括新生代,老年代)劃分爲多個大小固定的獨立區域(Region),而且跟蹤這些區域裏面的垃圾堆積程度,在後臺維護一個優先列表,每次根據容許的收集時間,優先回收垃圾最多的區域(這就是Garbage First名稱由來)算法
部分參數:多線程