[TOC]算法
Serial是單線程垃圾回收器,當須要執行垃圾回收時,程序會暫停一切工做,而後單線程執行垃圾回收.多線程
單線程的好處就是減小上下文切換,減小系統開銷.可是這種方式的缺點也很明顯,在GC的過程當中,會暫停程序執行. 若GC發生不頻繁能夠選這個. 對於新聲代來講,區域比較小,停頓時間短.
ParNew一樣用於新生代,是Serial的多線程版本,而且在參數,算法(一樣的複製算法)和Serial相同.Par是Parallel的縮寫,多線程的意思,可是這裏的多線程僅僅指垃圾收集多線程並行,並非垃圾收集和程序並行運行.ParNew也須要暫停一切工做,而後多線程並行垃圾收集.性能
由於是多線程執行,因此在多CPU環境下,效率比Serial
高,可是在單CPU環境下,由於線程切換,反而性能比較差.spa
在Server模式下,ParNew是一個很是重要的收集器,由於除Serial外,目前只有ParNew與CMS收集器配合工做.
Parallel scavenge是一個新生代垃圾收集器,它是用複製算法的垃圾收集器,又是多線程並行的垃圾收集器,和ParNew相似.吞吐量優先的垃圾收集器,是Java1.8默認的新生代垃圾收集器.
Parallel scavenge收集器的目標是達到一個可控的吞吐量,(吞吐量=運行用戶代碼時間/(運行用戶代碼時間+垃圾收集時間))
Parallel scavenge收集器的高吞吐量能夠最高效率的利用CPU,儘快的完成程序的運算任務,主要適合後臺運算而不是太多交互的任務(太多交互的任務,適合用響應時間優先的CMS垃圾收集器)Parallel scavenge能夠精確控制吞吐量,經過兩個參數:控制最大垃圾收集停頓時間
-XX:MaxGCPauseills
,設置吞吐量大小-XX:GCTimeRatio
(GCTimeRatio的默認值爲99,所以,GC耗時的佔比應爲1/(1+99)=1%。使用參數的理論效果:GCTimeRatio越大,吞吐量越大,GC的總耗時越小。有可能致使單次MinorGC耗時變長。適用於高運算場景). 它還能夠用-XX:+UseAdaptiveSizePolicy
參數進行自適應調節(GC Ergonomics),打開後會JVM會根據當前的運行情況動態調整最適合的吞吐量,配合前面兩個參數更好.線程