垃圾回收算法

拷贝算法 Copying  新生代的eden,S0,S1中使用。 空间浪费,一块空间

标记清除 Mark Sweep    会有内存碎片,导致只有要进行内存压缩。    

标记压缩 Mark   在标记阶段和标记清除算法一样。在完成之后,不是直接清除垃圾内存,而是将存活对象往一端移动,然后直接清除另一端的所有内存。

STW:在垃圾回收算法执行的过程中,需要JVM内存冻结的一种状态。其他线程都停止执行了,GC线程除外。

垃圾回收器

年轻代  Serial           ParNew    Parallel Scavenqe

老年代  SerialOld     Parallel Old  CMS

Serial  串行  需要GC时,其他线程直接暂停, 单线程GC回收,完成之后再继续    单CPU架构下的早期垃圾回收期

Paraller  并行  在穿行基础上进行多线程GC     Parallel Scavenqe+Parallel Old是jdk 1.8之前默认的垃圾回收器   在多CPU架构下性能高

CMS  Current Mark Sweep   核心思想就是将STW打散。在垃圾回收的一些阶段(并发标记,并行清除)用户线程可以和GC线程并发执行。

CMS GC的主要四个阶段:

初始标记(发生STW) 标记与GC Root相连接的对象

并发标记(不会STW,用户线程与垃圾标记线程同时执行)

重新标记(会发生STW)  防止在并发标记的过程中,发生了漏标  发生了变化。 

并发清除

G1 First Gaballage 垃圾优先   堆内存不在物理分代,只有逻辑分区,划分为一个个的Region,每个Region属于不同的年代。

第一:初始标记,标记出GC Root直接引用的对象。 STW

第二:标记Region  通过RSet标记出上一个阶段Region引用到的Old的Region。

第三:并发标记阶段  跟CMS的步骤是差不多的。 现在不需要遍历整个Old区域,而只是需要遍历第二步标记出来的Region。

第四:重新标记,跟CMS的重新标记过程差不多。

第五:垃圾清理  与CMS不同的是,G1采用复制算法。直接将整个Region中的对象拷贝到另外一个Region。 而这个阶段,G1只选择垃圾较多的Region,而不是全部的。

ZGC:可以回收超大的内存,和内存大小无关。

三色标记算法

CMS中用来标记垃圾的算法,将对象分为三种颜色

黑色:自身和成员标量标记完成

灰色:自生标记完成,成员变量未标记

白色:自身未标记

CMS使用增量标记,把黑色的重新标记为灰色,然后冲洗标记。 

03-28 12:29