垃圾回收算法:
拷贝算法 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使用增量标记,把黑色的重新标记为灰色,然后冲洗标记。