今日总结
G1垃圾收集器特点:
- 从原来的「物理」分代,变成现在的「逻辑」分代,将堆内存「逻辑」划分为多个Region
- 使用CSet来存储可回收Region的集合
- 使用RSet来处理跨代引用的问题(注意:RSet不保留 年轻代相关的引用关系)
- G1可简单分为:Minor GC 和Mixed GC以及Full GC
- 【Eden区满则触发】Minor GC 回收过程可简单分为:(STW) 扫描 GC Roots、更新&&处理Rset、复制清除
- 全局并发标记的过程跟CMS过程差不多:初始标记(STW)、并发标记、最终标记(STW)以及清理(STW)
- 【整堆空间占一定比例则触发】Mixed GC 依赖「全局并发标记」,得到CSet(可回收Region),就进行「复制清除」
- 使用SATB算法来处理「并发标记」阶段对象引用存在变更的问题
- 提供可停顿时间参数供用户设置(G1会尽量满足该停顿时间来调整 GC时回收Region的数量)
- R大描述G1原理的时候,他提到:从宏观的角度看G1,主要分为两块「全局并发标记」和「拷贝存活对象」
《对线面试官》系列目前已经连载31篇啦,这是一个讲人话面试系列
- 【对线面试官】Java注解
- 【对线面试官】Java泛型
- 【对线面试官】 Java NIO
- 【对线面试官】Java反射 && 动态代理
- 【对线面试官】多线程基础
- 【对线面试官】 CAS
- 【对线面试官】synchronized
- 【对线面试官】AQS&&ReentrantLock
- 【对线面试官】线程池
- 【对线面试官】ThreadLocal
- 【对线面试官】CountDownLatch和CyclicBarrier
- 【对线面试官】为什么需要Java内存模型?
- 【对线面试官】深入浅出 Java 内存模型
- 【对线面试官】Java从编译到执行,发生了什么?
- 【对线面试官】双亲委派机制
- 【对线面试官】JVM内存结构
- 【对线面试官】垃圾回收机制
- 【对线面试官】CMS垃圾回收器
- 【对线面试官】List
- 【对线面试官】Map
- 【对线面试官】SpringMVC
- 【对线面试官】Spring基础
- 【对线面试官】SpringBean生命周期
- 【对线面试官】Redis基础
- 【对线面试官】Redis持久化
- 【对线面试官】Kafka基础
- 【对线面试官】使用Kafka会考虑什么问题?
- 【对线面试官】MySQL索引
- 【对线面试官】MySQL 事务&&锁机制&&MVCC
- 【对线面试官】MySQL调优
参考资料:
- https://hllvm-group.iteye.com/group/topic/44381#post-272188 R大G1讲解
- https://www.zhihu.com/question/37028283/answer/78008095 关于CMS、G1垃圾回收器的重新标记、最终标记疑惑?
- https://www.zhihu.com/question/41922036/answer/93079526 Major GC和Full GC的区别是什么?触发条件呢?
- https://www.zhihu.com/question/37028283 关于CMS、G1垃圾回收器的重新标记、最终标记疑惑?
- https://kaiwu.lagou.com/course/courseInfo.htm?courseId=31#/detail/pc?id=1031第07讲:大厂面试题:有了 G1 还需要其他垃圾回收器吗?
- https://time.geekbang.org/column/article/109201 26 | 答疑课堂:模块四热点问题解答
- https://www.cnblogs.com/Courage129/p/14385571.html JVM垃圾回收之三色标记
- https://zhuanlan.zhihu.com/p/54048685 可能是最全面的G1学习笔记
- http://www.linkedkeeper.com/1511.html 详解 G1 垃圾收集器
- https://hllvm-group.iteye.com/group/topic/44529 关于incremental update与SATB的一点理解
- https://zhuanlan.zhihu.com/p/337029344 G1收集器原理与分析
- https://zhuanlan.zhihu.com/p/71058481 CMS 与 G1 垃圾收集器的思考 (1)