垃圾收集器

Serial收集器

优点:简单而高效(与其他收集器的单线程相比)。Serial收集器由于没有线程交互的开销,自然可以获得很高的单线程收集效率。

缺点:Stop The World

新生代采用复制算法,老年代采用标记-整理算法。


ParNew收集器:

ParNew收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为(控制参数、收集算法、回收策略等等)和Serial收集器完全一样。

新生代采用复制算法,老年代采用标记-整理算法


Parallel Scavenge收集器:

Parallel Scavenge 收集器类似于ParNew 收集器,是Server 模式(内存大于2G,2个cpu)下的默认收集器

特点:

Parallel Scavenge收集器关注点是吞吐量(高效率的利用CPU)。

所谓吞吐量就是CPU中用于运行用户代码的时间与CPU总消耗时间的比值

CMS等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。



Serial Old收集器:

Serial收集器的老年代版本

Parallel Old收集器:

Parallel Scavenge收集器的老年代版本。

CMS收集器(-XX:+UseConcMarkSweepGC(主要是old区使用)):

CMS(Concurrent Mark Sweep——标记-清除)收集器是一种以获取最短回收停顿时间为目标的收集器。

它而非常符合在注重用户体验的应用上使用,它是HotSpot虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作

过程:


优点:

并发收集、低停顿

缺点:

1.对CPU资源敏感(会和服务抢资源)

2.无法处理浮动垃圾(在java业务程序线程与垃圾收集线程并发执行过程中又产生的垃圾,这种浮动垃圾只能等到下一次gc再清理了);

3.它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生

G1收集器(-XX:+UseG1GC):

G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.


G1将Java堆划分为多个大小相等的独立区域(Region),虽保留新生代和老年代的概念,但不再是物理隔阂了,它们都是(可以不连续)Region的集合。

分配大对象(直接进Humongous区,专门存放短期巨型对象,不用直接进老年代,避免Full GC的大量开销)不会因为无法找到连续空间而提前触发下一次GC。

特点:

并行与并发:

G1能充分利用CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短Stop-The-World停顿时间。部分其他收集器原本需要停顿Java线程来执行GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行。

分代收集:

虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但是还是保留了分代的概念

空间整合:

与CMS的“标记--清理”算法不同,G1从整体来看是基于“标记整理”算法实现的收集器;从局部上来看是基于“复制”算法实现的。

可预测停顿:


G1收集器的运作大致分为以下几个步骤:

初始标记(initial mark,STW):

在此阶段,G1 GC 对根进行标记。该阶段与常规的 (STW)年轻代垃圾回收密切相关

并发标记(Concurrent Marking):

G1 GC 在整个堆中查找可访问的(存活的)对象

最终标记(Remark,STW):

该阶段是 STW 回收,帮助完成标记周期

筛选回收(Cleanup,STW):

筛选回收阶段首先对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划,这个阶段其实也可以做到与用户程序一起并发执行,但是因为只回收一部分Region,时间是用户可控制的,而且停顿用户线程将大幅提高收集效率

G1垃圾收集分类:

YoungGC:

1.新对象进入Eden区

2.存活对象拷贝到Survivor区

3.存活时间达到年龄阈值时,对象晋升到Old区

MixedGC:

1.不是FullGC,回收所有的Young和部分Old(根据期望的GC停顿时间确定old区垃圾收集的优先顺序)

2.global concurrent marking (全局并发标记)

    2.1.Initial marking phase:标记GC Root,STW

    2.2 Root region scanning phase:标记存活Region

    2.3.Concurrent marking phase:标记存活的对象

    2.4 Remark phase :重新标记,STW

    2.5.Cleanup phase:部分STW

你可能感兴趣的:(垃圾收集器)