jvm_常见垃圾回收器

  • Post author:
  • Post category:其他


Java 虚拟机常见垃圾回收器

JVM 虚拟机中常见垃圾回收器一共有七种垃圾回收器,它们搭配使用实现了JVM的垃圾回收机制。

1. Serial 收集器

Serial垃圾回收器是最早的垃圾回收器,它是单线程回收器并且作用于新生代。缺点:Serail回收器在进行垃圾回收时,

会暂停其他线程的工作。优点:尽管Serial是很古老的垃圾回收器,它依然是HotSpot虚拟机运行在客户端模式下的默认新

生代收集器,有着优于其他收集器的地方,那就是简单而高效(与其他收集器的单线程相比),对于内存资源受限的环境,

它是所有收集器里额外内存消耗最小的;

2. parNew 收集器

parNew垃圾回收器是Serial垃圾回收器的多线程并行版本。parNew收集器除了多线程收集之外,相较于Serail收集器并没

有什么改进。在JDK9之后,parNew 垃圾收集器只能和CMS垃圾收集器一起使用,可以理解为parNew 垃圾收集器并入CMS

垃圾收集器中。

3. Parallel Scavenge 收集器

Parallel Scavenge收集器也是一款新生代收集器,它同样是基于标记-复制算法实现的收集器,也是能够并行收集的多线程

收集器。

4. Serial Old收集器

Serial Old是Serial收集器的老年代版本,它同样是一个单线程收集器,使用标记-整理算法。这个收集器的主要意义也是供

客户端模式下的HotSpot虚拟机使用。

5. Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,支持多线程并发收集,基于标记-整理算法实现。Parallel old是jdk6之后

才出现的。对于在此之前,如果新生代使用Parallel Scavenge 收集器,那么老年代能够使用的垃圾收集器只有 Serail old,对于服务

器的运行,这无疑是是不合适的,效率没有 parNew 加CMS 组合高。

6. CMS 收集器

CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。作用于老年代,采用标记-清除算法。CMS收集器主要用于B/S架构,

CMS于parNew处理器组合实现垃圾回收

7. G1 收集器

面对Java堆的垃圾回收器。JDK9以后,G1是java服务器端主流的垃圾收集器。G1跳出了这个樊笼,它可以面向堆内存任何部分来组

成回收集(Collection Set,一般简称CSet)进行回收,衡量标准不再是它属于哪个分代,而是哪块内存中存放的垃圾数量最多,回收收益

最大,这就是G1收集器的Mixed GC模式。G1开创的基于Region的堆内存布局是它能够实现这个目标的关键。虽然G1也仍是遵循分代收集

理论设计的,但其堆内存的布局与其他收集器有非常明显的差异:G1不再坚持固定大小以及固定数量的分代区域划分,而是把连续的Java

堆划分为多个大小相等的独立区域(Region),每一个Region都可以根据需要,扮演新生代的Eden空间、Survivor空间,或者老年代空间。

收集器能够对扮演不同角色的Region采用不同的策略去处理。



版权声明:本文为attentiony原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。