说说JVM的GC功能之一GC算法的选择

若是你的应用能够忍受Full GC带来的停顿,Throught收集器(即并行GC)能得到最高的性能。算法

同是他使用CPU和堆的大小都比其余的收集器少(固然不包括Serial收集器,它的使用场景太有限)。ide


若是没法忍受Full GC带来的停顿,若是可用堆较小,能够选择CMS或G1,若是可用堆较大,建议使用G1。
性能

1.  对于高负荷的应用,若GC时间不超过3%, 调优GC的优化空间比较有限,建议其余地方入手。
优化

2. 若是停顿时间与目标接近,你须要调整最大停顿时间。若是差距很大。spa

    建议缩小新生代的大小(若是是FullGC的致使,则减小老年代大小),这样停顿次数增长,但单次停顿时间短了。线程


几点总结:orm

  1. 全部回收算法对新生代的回收都须要"Stop-The-World"。对象

  2. Serial Old,Throught收集器收集对于老年代的回收,须要"Stop-The-World"。
    it

  3. CMS收集器在CPU不足或因碎片没法装载对象时,会退变成单线程的Serial Old。class

  4. G1收集器由于老年代也分几个区,可能执行区与区之间Copy回改,必定程度减小碎片问题。

  5. 若是你关注总体请求的响应时间,CMS更合适。若是只关注90%的请求的响应时间,Throught收集器更好。

  6. 当CPU充足时,CMS可能表现出比Throught收集器更好的吞吐量。

相关文章
相关标签/搜索