G1GC相当复杂,一篇文章的话很难说清楚,并且长篇冗杂,难读。本文旨在将G1GC中的部分点Get到,也很难全面,如果错误,请帮忙指正,多谢。
一、G1GC的目的
针对服务器应用(大heap内存、多核)进行垃圾收集,为了同时兼顾吞吐量和停顿时间而生。
二、特点
分区、分代、适用多核大heap内存、高吞吐、低停顿
三、如何实现对吞吐量和停顿时间的兼顾
1、技术手段
1)region划分
将整个heap划分为大小相等的region,每个region内的heap内存地址连续。
2)停顿时长预测模型
通过该模型来确定回收哪些region,以满足用户指定的可停顿时间。
3)并发全局标记
和应用程序并发执行,标记整个heap中存活对象。
4)Garbage-First
优先回收垃圾最多的region,以获取最大空间释放。
5)拷贝压缩
具体回收时,将Object从一个或多个region拷贝到单个heap region上,并对内存进行压缩整理。这一过程多线程并行执行,因此可减小停顿时间并提高吞吐量。
2、具体过程
1)region划分
将整个heap划分为大小相等的region,一组空region为逻辑上的yong region,另一组为逻辑上的old region,yong region包含Eden、survivor区,也都是由region为单位组成。
2)对象分配
对象在yong region 的Eden上分配
3)触发GC
当年轻代满,无法为