JDK7的5种GC类型

SerialGC

ParallelGC

ParallelOld GC (Parallel Compacting GC)

ConcurrentMark & Sweep GC  (or “CMS”)

GarbageFirst (G1) GC

Serial GC

使用标记整理法

Serial GC不应该被用在服务器上。这种GC类型在单核CPU的桌面电脑时代就存在了。使用Serial GC会显著降低应用的性能指标

Parallel GC 

JDK7的5种GC类型_第1张图片

Parallel GC采用的是多线程

Parallel Old G

1.  与parallel GC相比,唯一的区别在于针对老年代的GC算法。Parallel Old GC分为三步:标记-汇总-压缩(mark– summary – compaction)。

2.  汇总(summary)步骤与清理(sweep)的不同之处在于,其将依然幸存的对象分发到GC预先处理好的不同区域。

CMS GC 

JDK7的5种GC类型_第2张图片

回收过程:

1.   初始化标记:只是查找那些距离类加载器最近的幸存对象。

2.   并行标记:所有被幸存对象引用的对象会被确认是否已经被追踪和校验。这一步的不同之处在于,在标记的过程中,其他的线程依然在执行。

3.   重新标记:会再次检查那些在并行标记步骤中增加或者删除的与幸存对象引用的对象。

4.   并行交换:转交垃圾回收过程处理。垃圾回收工作会在其他线程的执行过程中展开。

缺点:

1.   它会比其他GC类型占用更多的内存和CPU

2.   默认情况下不支持压缩步骤

G1 GC

JDK7的5种GC类型_第3张图片

1.  每个对象被分配到不同的格子,随后GC执行。

2.  当一个区域装满之后,对象被分配到另一个区域,并执行GC。

你可能感兴趣的:(java虚拟机)