一、垃圾收集器之Serial
-
serial收集器
serial收集器是最基本发展最悠久的收集器。serial收集器是一个单线程的收集器,但他的“单线程”的意义并不仅仅只会使用一个cpu或者一条线程去完成垃圾收集工作,更重要的是在他进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束。
serial/serial Old收集器运行示意图
- serial的优点:简单有效(与其他收集器的单线程比),对于限定单个cpu的环境来说,serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程的收集效率。serial收集期对于运行在client模式下的虚拟机来说是一个很好的选择。
- 串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)
- 串行垃圾回收器通过持有应用程序所有的线程进行工作。它为单线程环境设计,只使用一个单独的线程进行垃圾回收,通过冻结所有应用程序线程进行工作,所以可能不适合服务器环境。它最适合的是简单的命令行程序。
通过JVM参数-XX:+UseSerialGC
可以使用串行垃圾回收器。
二、垃圾收集器之ParNew收集器
- ParNew收集器是JAVA虚拟机中垃圾收集器的一种。它是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数(例如:-XX:SurvivorRatio、 -XX:PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop The World、对象分配规则、回收策略等都与Serial收集器一致。
- ParNew是许多运行在Server模式下的虚拟机中首选的新生代收集器,,除了Serial收集器外,只有它能与CMS收集器配合工作。
- ParNew收集器其实就是Serial收集器的多线程版本。新生代并行,老年代串行;新生代复制算法、老年代标记-压缩
参数控制:-XX:+UseParNewGC ParNew收集器
-XX:ParallelGCThreads 限制线程数量
三、垃圾收集器之parallel 收集器
Parallel Scavenge收集器也是使用复制算法的收集器
Parallel Scavenge的特点:Parallel
Scavenge关注与其他收集器不同,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel
Scavenge收集器的目标则是达到一个可控制的吞吐量,所谓的吞吐量就是CPU用于运行用户代码的时间与CPU总耗时间的比值,即吞吐量 =
运行用户代码时间/(运行用户代码时间+垃圾收集时间)。