Jvm 的年轻代垃圾收集器可以分为:Serial 收集器、ParNew 收集器和 Parallel Scavenge 收集器。
Serial 是最基本也是发展历史最悠久的收集器。这个收集器是一个 “单线程” 的收集器。
这个 “单线程” 的意义并不是说它仅会使用一个 CPU 或一条收集线程去完成垃圾收集工作,而是它很霸道,只要它在进行垃圾回收的时候,必须要暂停其它所有线程的工作,直到执行垃圾回收的线程执行结束。“ Stop The World ” 这个名词就由此而来。
简单高效。
在执行垃圾回收的时候,会将所有用户正在工作的线程全部停掉,客户体验很不好,在使用系统过程中老是停顿。
ParNew 收集器是 Serial 收集器的多线程版本。
它的收集算法,Stop The World、对象的分配规则、回收策略和 Serial 收集器是一样的,不同的地方就是在于在执行回收的时候,用多线程的方式回收。
Parallel Scavenge 表面上看上去和 ParNew 是一样的。它也是使用复制算法的收集器,并且是并行的多线程收集器。
Parallel Scavenge 是吞吐量(CPU 用于运行用户代码的时间与 CPU 总消耗时间的比值 )优先的收集器。它的目标是达到一个可控的吞吐量。