
前常用的垃圾回收器有7个,按照工作的内存区间的不同,可以分为3个新生代收集器和3个年老代收集器。G1比较特殊不分代
- Serial(新生代串行收集器)
使用复制算法的垃圾回收器,只能用于新生代。Serial回收器使用单线程进行垃圾回收。
在 HotSpot 虚拟机中,使用-XX:+UseSerialGC 参数可以指定使用Serial(新生代串行收集器)+ Serial Old(老年代串行收集器)。当 JVM 在 Client 模式下运行时,它是默认的垃圾收集器。 - ParNew(新生代并行收集器)
Serial回收器的多线程版本,只能用于新生代。使用复制算法,多线程并行工作。在多CPU主机上的性能高于Serial,单CPU主机上的性能低于Serial。
如果使用-XX:+UseParNewGC,表示ParNew(并行收集器)+ Serial Old(串行收集器) - Parallel Scavenge(新生代并行回收收集器)
新生代并行回收收集器也是使用复制算法的收集器。从表面上看,它和并行收集器一样都是多线程、独占式的收集器。但是,并行回收收集器有一个重要的特点:它非常关注系统的吞吐量。 - Serial Old 收集器
Serial收集器的老年版本,独占式,单线程,使用的是标记–整理算法,这个收集器的目的也是用于Client模式下的虚拟机使用。 - Parallel Old收集器
是Parallel Scavenge收集器的老年版本,使用多线程和标记整理算法,注重吞吐量优先,在注重吞吐量和CPU资源铭感的场合,都可以考虑Parallel Scavenge加Parallel Old收集器。 - CMS收集器
CMS收集器(Concurrent Mark Sweep)是一种一获取最短回收停顿时间作为目标的收集器,目前很大一部分的Java应用都集中在互联网和B/S系统上,这类应用尤其重视服务的响应速度,希望系统停顿的时间最短。 使用多线程和标记清除算法。 - G1收集器(不分代)
基于标记整理算法,所以不会产生大量的空间碎片,而且他可以非常精确的控制停顿,G1收集器可以实现在基本不牺牲吞吐量的前提下完成低停顿的内存回收,这是由于它能极力的避免全区域的垃圾收集,之前的收集器进行收集的范围都是整个新生代或者老年代,而G1收集器将整个内存堆分为多个大小固定的独立去,跟踪这些区域里垃圾对集成度,在后台维护一个优先列表,每次根据允许的收集时间,优先收集垃圾最多的区域,区域划分及有优先级的区域回收,保证了G1收集器在有限的时间内可以获得极高的效率。
本文详细介绍了Java中常见的7种垃圾回收器,包括新生代和年老代收集器,如Serial、ParNew、ParallelScavenge、SerialOld、ParallelOld、CMS以及不分代的G1收集器。每种收集器的特点、算法和应用场景都有具体说明。
5万+

被折叠的 条评论
为什么被折叠?



