若是你的应用能够忍受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收集器更好的吞吐量。