很多人都感觉jvm垃圾回收很麻烦,其实常见的场景是有限的大概是三种,parNew+cms,g1,parallel+parallel old。 parallel+parallel old是一个吞吐量优先的选择。parNew+cms,g1都是响应优先的选择,但是他两者谁更好呢,我暂时的建议是想让gc时间在你的掌控就用G1,并且设置-XX:MaxGCPauseMills 。如果没有这个需求,先用cms吧,毕竟经过时间的考验bug少。
至于单线程回收的方式,我在下面也标注了使用场景。因为现在cpu核数往往不少,年轻代选择serial的场景还真不多,例如一起跑的机器上有cpu耗费大户,这种情况可以考虑减少cpu的压力使用serial,老年代自从有了parallel old,serial old也很少上场了。serial old现在还在cms和G1中做后备方案。
每个垃圾回收器的特性大概是下面的思维导图。图是大图可以另存为图片观看。下面对每种垃圾回收器做了简单的概述,特点以及常见参数设置,例如有些通用的参数-XX:ParallelGCThreads 默认的值在cms上介绍了,其他的垃圾回收器能用这个参数的都一样,没有重复写。基本可以满足一般对垃圾回收的简单了解。