阿里巴巴|Java8 的 G1相对于之前的 CMS 有什么特别的呢?( 二 )
GC Roots 开始堆中对象进行可达性分析 , 找出存活的对象 , 这个阶段耗时较长 , 但是可以与用户程序并发执行;
CMS 的重新标记的思路一直 , 也是为了修正并发标记期间由于用户程序并发运行而导致标记产生变动的那一部分对象 , 不过不同的是 G1 会将这段时间对象变化记录在线程 Remembered Set Logs 里面 , 最终标记阶段需要把 Remembered Set Logs 的数据合并到 Remembered Set 中 , 这个阶段需要停顿线程 , 不过是可并行执行;G1 与 CMS 最大的不同之处 , G1 首先会对各个需要回收的 Region 代价进行量化和排序 , 在结合用户所期望的 GC 停顿时间来制定回收计划 , 通过-XX:MaxGCPauseMillis 参数来指定期望的回收时间 。 这个阶段也可以做到与用户程序一起并发执行 , 但是因为只回收一部分 Region , 时间是用户可控制的 , 而且停顿用户线程将大幅提高收集效率 。 Remembered Set 记忆集 , 是用来记录对象引用的 , 在并发标记的时候有对象引用发生变更的时候会记录到这里 , 等到最终标记的时候进行修正 。 整体上来看 G1 采用的是标记-整理的算法来进行垃圾回收 , 也不会像 CMS 那样会产生内容碎片 , 所以 G1 同时可以进行年轻代和老年代的垃圾回收 , 相比 CMS 会更灵活一点 , 而且也因为 G1 将内存划分成 Region 了 , 也不会造成复制算法带来的空间浪费的问题 。总结 【阿里巴巴|Java8 的 G1相对于之前的 CMS 有什么特别的呢?】首先CMS 和 G1 都是并发和分代的垃圾回收器 , 并且都是低延迟的;CMS 是基于标记-清除算法的 , 只适合在年轻代使用 , 不可预测停顿时间 , 同时年轻代和老年代是物理隔离的 。 G1 是基于标记-整理的高吞吐 , 可预测停顿时间的垃圾回收器 , 可以同时使用在年轻代和老年代 , 同时年轻代和老年代是逻辑隔离的 。
| 特点 | G1 | CMS |
|---|---|---|
| 算法 | 标记-整理 | 标记-清除 |
| 年轻代和老年代隔离方式 | 逻辑隔离 | 物理隔离 |
| 停顿时间可预测行 | 是 | 否 |
| 并发和分代 | 支持 | 支持 |
| 吞吐量 | 高 | 低 |
| 使用场景 | 年轻代 , 老年代 | 年轻代 |
| 低延时 | 是 | 是 |
"
- 京东|裁员不忘膈应人,这家互联网大厂送的离职礼物恶心到我了!
- iPhone14|准大学生的数码装备推荐
- 有人觉得中暑就是热出来的,吃一些退烧药就好了,这种做法 蚂蚁庄园今日答案6月28日
- 浮甘瓜于清泉,沉朱李于寒水”描述的是什么场面 蚂蚁庄园今日答案6月28日
- 个头大的车厘子比小樱桃营养价值更高,对吗 蚂蚁新村6月28日答案最新
- 位于广东省阳江市的海陵岛自然资源丰富,景色优美,该岛没有 神奇海洋6月28日答案
- 哪种水果横着切开像星星的形状 蚂蚁庄园今日答案6月29日
- 为验证人类和黑猩猩,是否会产生新的后代,科学家找来5位姑娘!
- 喜马拉雅山出现的“雪人”是何生物?目击者:智商高、攻击性强
- 为什么科学家表示人类“灭绝”的可能性极低?这些理由你赞同吗?
