如何选择GC算法

对于几种GC垃圾收集器的介绍请参阅

http://lizhe.name.csdn.net/node/89

1. Serial

虽然也是分代收集器但是单线程, 运行时阻塞全部进程, 适用场景非常有限,一般用于单核cpu并且堆小于100M的场景

2. Throughput

是Serial的升级版本, 多线程, 是server模式的默认配置, 有富裕的cpu内核的话, 这个版本即使在堆内存小于100M的情况下也比Serial提供了更好的性能

如果堆小于4GB, 这个配置比较中庸一点

如果是运行batch批处理程序, 当batch能够吃掉所有cpu内核时(有足够多的线程或者cpu没有多余的内核提供给jvm), throughput往往可以比CMS提供更好的性能

因为它可以更长时间的保证cpu在100%占用率的情况下工作

如果是运行web应用, 当cpu没有多余内核时, throughput仍然能提供更好的性能. 这是因为如果CMS得倒的cpu资源受限,CMS收集器会发生并发失效的情况,这时候它会使用单线程Full GC

3. CMS

无论是batch程序还是web应用, 只有当cpu资源有富裕的情况下, CMS才可以比throughput提供更好的性能和更大的吞吐量(TPS)

4. G1

G1收集器与CMS收集器类似, 如果堆小于4GB, CMS比G1性能更好, 因为它的算法更简洁,需要的多余动作更少