若是你的應用能夠忍受Full GC帶來的停頓,Throught收集器(即並行GC)能得到最高的性能。算法
同是他使用CPU和堆的大小都比其餘的收集器少(固然不包括Serial收集器,它的使用場景太有限)。ide
若是沒法忍受Full GC帶來的停頓,若是可用堆較小,能夠選擇CMS或G1,若是可用堆較大,建議使用G1。
性能
1. 對於高負荷的應用,若GC時間不超過3%, 調優GC的優化空間比較有限,建議其餘地方入手。
優化
2. 若是停頓時間與目標接近,你須要調整最大停頓時間。若是差距很大。spa
建議縮小新生代的大小(若是是FullGC的致使,則減小老年代大小),這樣停頓次數增長,但單次停頓時間短了。線程
幾點總結:orm
全部回收算法對新生代的回收都須要"Stop-The-World"。對象
Serial Old,Throught收集器收集對於老年代的回收,須要"Stop-The-World"。
it
CMS收集器在CPU不足或因碎片沒法裝載對象時,會退變成單線程的Serial Old。class
G1收集器由於老年代也分幾個區,可能執行區與區之間Copy回改,必定程度減小碎片問題。
若是你關注總體請求的響應時間,CMS更合適。若是隻關注90%的請求的響應時間,Throught收集器更好。
當CPU充足時,CMS可能表現出比Throught收集器更好的吞吐量。