JVM垃圾收集器一:Serial和Parallel收集器
# JVM垃圾收集器一:Serial和Parallel收集器
# 一、简介
如果说垃圾收集算法是内存回收的理论,那么垃圾收集器就是内存回收的具体实现。
我们能做的就是根据具体应用场景选择适合自己的垃圾收集器
# 二、常用的垃圾收集器
# 1、Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)
Serial收集器是一个单线程收集器,它在进行垃圾收集工作的时候必须暂停其他所有的工作线程。
新生代采用标记-复制算法,老年代采用标记-整理算法
优势:简单而高效(与其他收集器的单线程相比)。没有线程交互的开销,自然可以获得很高的单线程收集效率
Serial Old收集器是Serial收集器的老年代版本。有两大用途:
一种用途是在JDK1.5及以前的版本中与Parallel Scavenge收集器搭配使用
另一种用途是作为CMS收集器的后备方案
# 2、Parallel Scavenge收集器(-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代))
Parallel收集器其实就是Serial收集器的多线程版本,默认的收集线程数跟cpu核数相同
新生代采用标记-复制算法,老年代采用标记-整理算法
Parallel Scavenge收集器关注点是吞吐量(高效率的利用CPU)。CMS收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是CPU中用于运行用户代码的时间与CPU总消耗时间的比值
Parallel Old收集器是Parallel Scavenge收集器的老年代版本。在注重吞吐量以及CPU资源的场合,都可以优先考虑 Parallel Scavenge收集器和Parallel Old收集器(JDK8默认的新生代和老年代收集器)
# 3、ParNew收集器(-XX:+UseParNewGC)
ParNew收集器跟Parallel收集器很类似,除了Serial收集器外,只有它能与CMS收集器配合工作