GC

GC实际是内存的申请与回收的管理控制模块。

GC的背景和一般原理

内存仓库中,仓库与仓库之间循环调用,导致使用数永远不为0,从而内存得不到释放,累计下去会导致内存溢出,所以需要GC来控制和管理内存空间的申请与释放。

标记清除算法(Mark and Sweep)

Marking:遍历所有可达对象,并在本地内存(native)中分门别类几下。

Sweeping:这一步保证了,不可达对象所占用的内存,在之后进行内存分配时可以重用。

标记与清除之间,内存空间状态变更问题,引入STW,stop world。GC暂停。

堆分代(Heap)

年轻代、老年代、新生代、S0(from)、S1(to)

大部分新生对象很快无用;

存活较长时间的对象,可能存活更长时间。

不同种类堆空间中使用的GC策略不同。

不同的GC策略

标记清除算法Mark-Sweep(典型:老年代)

复制算法Mark-Copy(典型:年轻代)

(新生代)Eden区+S0,标记后复制到S1区,然后全部删除Eden区和S0

标记清除整理算法(标记-清除-整理Mark-Sweep-Compact)

GC分类

串行GC(Serial GC):

-XX:+UseSerialGC 配置串行GC

-XX:+UseParNewGC 改进版本的串行GC,可以配合CMS使用

年轻代使用标记复制算法,对老年代使用标记清除整理算法,触发STW事件之后,则全线停止

并行GC(Parallel GC):

-XX:+UseParallelGC

-XX:+UseParallelOldGC

-XX:+UseParallelGC -XX:+UseParallelOldGC

------上述三种写法,同样的效果

--XX:ParallelGCThreads=N 来指定GC的线程数,默认值为CPU的核心数。

年轻代和老年代的垃圾回收都会触发STW事件。

年轻代使用标记复制算法,老年代使用标记清除整理算法

CMS GC(Mostly Concurrent Mark and Sweep Garbage Collector),jdk8默认GC策略

+XX:+UseConcMarkSweepGC

年轻代,并行STW方式的标记复制算法;老年代使用并发标记清除算法。

CMSGC设计目标是避免在老年代垃圾收集的时候出现长时间的卡顿。

1、不对老年代进行整理,而是使用空闲列表(free-lists)来管理内存空间的回收。

2、在标记清除阶段,大部分工作和应用线程一起并发执行。

CMSGC处理的六个阶段

1、Initial Mark(初始标记)伴随着STW,初始化标记GCROOTS(所有根对象),以及被年轻代中所有存活对象所饮用的对象,老年代中所有可直达节点。

2、Concurrent Mark(并发标记)遍历老年代,标记所有存活对象。

3、Concurrent Preclean(并发预清理)并发处理过程中,被标记的对象发生了变动,则变动区域被称作脏卡区域(Card Marking)

4、Final Remark(最终标记)GC事件中的第二次(也是最后一次)STW停顿。处理脏卡区域,做最精准标记

5、Concurrent Sweep(并发清除)清除未被标记的对象空间

6、Concurrent Reset(并发重置)去除标记、回收空间。

G1 GC(Garbage-First)jdk9之后默认G1GC

+XX:+UseG1GC -XX:MaxGCPauseMillis=50

GC最大暂停时间毫秒单位

设计目标:将STW的停顿时间和分布,变成可预期且可配置的。

堆不再分成年轻代和老年代,而是划分为多个(通常为2048个)可以存放对象的小块堆区域(smaller heap regions)。每个小块可能一会被定义为Eden区,一会被指定为Survivor区或者Old区。在逻辑上,所有的Eden区和Survivor区合起来就是年轻代,所有的Old区加起来就是老年代。垃圾处理时,每次处理所有年轻代和部分老年代的区域。

年轻代和老年代不再是物理内存空间的概念,而是分区合集的逻辑概念。

ZGC/Shenandoah GC(RedHead中jdk8以及之后支持ShenandoahGC)

来自于PanselessGC(Azul公司)

ZGC

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx16g

主要特点:

1、GC最大停顿时间不超过10ms

2、堆内存支持范围广,小至几百MB的堆空间,大至4TB的超大对空间(JDK13升至16TB)

3、与G1相比,应用吞吐量下降不超过15%

4、当前只支持Linux/x64位平台,JDK15之后支持Mac与Windows系统

你可能感兴趣的:(GC)