1、Serial收集器(Serial + Serial Old)的主要特点是单线程回收资源。当需要执行垃圾回收时,程序会暂停一切工作(又称为Stop The World,STW),使用复制算法完成垃圾清理工作。
ParNew收集器是Serial收集器的多线程版本,除了使用多线程进行垃圾收集工作,其他的控制参数,收集算法,对象分配规则等均与Serial收集器一致。ParNew收集器在单核/双核环境下,效率未必有Serial收集器工作效率高(多线程切换开销等因素限制),当然随着核数的增加,其性能也会得到较大的提升。
Serial单线垃圾回收器: 程会暂停所有用户线程,不适合用在服务器!
2、Parallel收集器(Parallel Scavenge + Parallel Old)相比于Serial收集器的主要特点是,其是通过多线程完成垃圾的清理工作。其中Parallel Scavenge使用复制算法完成垃圾收集(Parallel Old使用标记整理算法),如果从这一点看其与ParNew相似,但实际上两者的出发点存在区别,区别如下所示:
ParNew出发点在于加速资源回收的速度,以减少应用的STW时间
Parallel Scavenge出发点在于资源回收的吞吐量,吞吐量 = 用户线程时间/(用户线程时间 + GC线程时间)
Parallel 并行垃圾回收器 用户线程也是暂停的,不过暂停时间比较短,适用于科学计算,与弱交互场景
3、CMS(Concurrent Mark Sweep)收集器是jdk 1.5推出的第一款真正意义上的并发收集器(针对老年代),实现了让垃圾收集器与用户线程(近似)同时工作。
“CMS”并发垃圾回收,用户线程与垃圾回收线程是并行的不需要完全暂停用户线程,适合用户交互较多的互联网公司对响应有要求的场景使用
4、G1 垃圾回收器
G1 会对堆内存分割成不同的区域,然后并发的对其进行回收!