Java Hotspot G1垃圾回收器浅谈

241 阅读1分钟

G1垃圾回收器介绍

G1 GC 全称Garbage-First Garbage Collector,通过 -XX:+UseG1GC参数来启用,在 JDK 7U4发行时被正式推出,在JDK 9中,G1被提议设置为默认的垃圾收集器。G1是一种服务端的垃圾收集器,应用在多处理器和大内存的环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求,像CMS收集器一样,能与应用程序线程并发执行。

G1收集器设计目标是为取代CMS收集器,它相对CMS具有以下优势。

  1. G1是一个有整理内存过程的垃圾收集器,不会产生很多的内存碎片.
  2. G1的Stop the world(STW)更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿时间。 传统的 GC内存结构 image.png G1 GC内存结构

image.png G1 的各代存储地址是不连续的,每一代都使用了n个不连续且大小相同的Region,每个Region占有一块连续的虚拟内存地址。

SATB(Snapshot at the beginning)算法

从字面理解是在GC开始时活着对象的一个快照,它通过Root Tracing得到,作用是维持GC的正确性。核心就是通过三色标记法。

  1. 白色是对象没有被标记到,标记阶段结束后,会被当做垃圾回收掉。
  2. 灰色是对象已经被标记到,但是对象引用的对象没有被标记。
  3. 黑色是对象已经被标记到,且对象引用的所有对象都已被标记。 参考网址blog.csdn.net/qq_21383435…

Rset

GC Roots

垃圾回收器工作流程

Young GC

Mixed GC

Full GC