Serial收集器
算法
單線程收集器,只使用一個CPU或者一條收集線程完成垃圾收集工做,在收集的時候「Stop The World」.多線程
優點:在單CPU中,簡單高效併發
ParNew收集器spa
是Serial收集器的多線程版本,是許多運行在Server模式下的虛擬機中首選的新生代收集器,目前只有ParNew收集器 和 Serial收集器 能與CMS搭配使用。在收集的時候「Stop The World」.線程
ParallelScavenge收集器對象
使用複製算法的收集器,是並行的多線程收集器。ParallelScavenge收集器目標是達到一個可控制的吞吐量(Throughput)。內存
吞吐量=運行用戶代碼時間 / (運行客戶代碼時間+垃圾收集時間)ci
eg:虛擬機總共運行100分鐘,垃圾收集花費1分鐘,吞吐量就是99%。資源
Serial Old 收集器虛擬機
單線程,使用「標記-整理」算法。主要意義被Client模式下的虛擬機使用。若是在Server模式下,兩大用途:在JDK1.5.及以前版本與ParallelScavenge收集器搭配使用;做爲CMS的後備預案。
Parallel Old 收集器
是ParallelScavenge收集器的老年代版本,使用多線程和「標記-整理」算法。在JDK1.6.中開始提供。
在注重吞吐量及CPU資源敏感的場合,能夠考慮ParallelScavenge收集器+Parallel Old 收集器
CMS收集器
是一種以獲取最短回收停頓時間爲目標的收集器。重視服務的響應速度,但願系統停頓時間最短,以給用戶帶來最好的體驗。CMS收集器很是符合這類應用的需求。
基於「標記-清除」算法,它的運行過程相對以前幾種收集來講更復雜一些,分爲4個步驟:
初始標記
併發標記
從新標記
併發清除
初始標記 和 從新標記須要「Stop The World」。
初始標記僅僅只是標記一下GC Roots能直接關聯到的對象,速度很快。
併發標記是進行GC Roots Treacing的過程。
從新標記階段是修改併發標記期間,因用戶程序繼續運做而致使標記產生變更的那一部分對象的標記記錄,該階段停頓時間通常會比初始化標記階段稍長,但遠比並發標記的時間短。
因爲整個過程耗時最長的 併發標記 和 併發清除 過程當中,收集器線程均可以與用戶線程一塊兒工做,整體上說,CMS收集器的內存回收過程是與用戶線程比起併發執行的。