G1垃圾回收器介绍
G1 GC 全称Garbage-First Garbage Collector,通过 -XX:+UseG1GC参数来启用,在 JDK 7U4发行时被正式推出,在JDK 9中,G1被提议设置为默认的垃圾收集器。G1是一种服务端的垃圾收集器,应用在多处理器和大内存的环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求,像CMS收集器一样,能与应用程序线程并发执行。
G1收集器设计目标是为取代CMS收集器,它相对CMS具有以下优势。
- G1是一个有整理内存过程的垃圾收集器,不会产生很多的内存碎片.
- G1的Stop the world(STW)更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿时间。
传统的 GC内存结构
G1 GC内存结构
G1 的各代存储地址是不连续的,每一代都使用了n个不连续且大小相同的Region,每个Region占有一块连续的虚拟内存地址。
SATB(Snapshot at the beginning)算法
从字面理解是在GC开始时活着对象的一个快照,它通过Root Tracing得到,作用是维持GC的正确性。核心就是通过三色标记法。
- 白色是对象没有被标记到,标记阶段结束后,会被当做垃圾回收掉。
- 灰色是对象已经被标记到,但是对象引用的对象没有被标记。
- 黑色是对象已经被标记到,且对象引用的所有对象都已被标记。 参考网址blog.csdn.net/qq_21383435…