240 发简信
IP属地:广东
  • @coffeebeansyy 降低停顿时间是一个很笼统的大概念,G1很多手段都是为了降低STW时间,比如引入了空间置换时间的 RSet,SATB本身解法也算是一种思路,区别于CMS增量 write barrier。CMS为了维持对象图变化才引入了post-write barrier 记录新引用关系的变化,这个维护成本很大,并且致命问题是,无法持续跟踪堆外根集变化,这样一来,remark阶段就需要重新扫描整个 GC Roots,新生代以及寄存器,too expensive,在处理大堆的时候很可能严重影响停顿时间;SATB跟CMS 增量barrier完全是另一套思路,关注的是引用关系的删除,使用的是pre-write barrier,在删除/变更 引用关系之前把旧值(old value)记录下来,对于在并发标记期间删除/变更的引用关系的旧值会记录下来,并且让引用指向的对象存活过此次GC,即使这个对象有可能并非存活,也只是多了些float garbage而已,在remark阶段也不需要重新扫描所有GC roots了,因为只要是新生成的对象,都视为alive。虽然两者remark阶段同为STW,但是实质上处理的事情和延时可能会有本质的区别,尤其是面对大堆的时候。

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • @coffeebeansyy 总的来说对于漏标的充分必要条件就是上面列举的两个,解法就是打破其中一个,CMS选择了打破前者,G1选择了打破后者,这也是两个算法的write barrier的本质区别

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • @coffeebeansyy
    cms和g1都是 post-write barrier 记录新对象引用
    =========================================
    G1的SATB跟踪的是旧引用的删除,而不是新引用的增加,所以你这个结论怎么来的?

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • @coffeebeansyy 因为是且关系,所以两个条件打破一个就可以不漏标了

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • @coffeebeansyy 两个条件同时满足,且关系,才能确保白色被漏标

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • 两个条件打破其中一个就能保证不漏标了,CMS 和 G1正好是两种不同的策略,CMS 是 post-write barrier,记录新对象引用,随后 remark 重新扫描(rescan)即可;G1则是 pre-write barrier ,记录删除的引用,并且假定快照之后新增的引用对象都是活对象

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • @coffeebeansyy 并发标记时,应用线程给一个黑色对象的引用类型字段赋值了该白色对象
    =========================================================
    单单这个条件并不能说明这个白色对象一定会被漏标,只是可能被漏标,如果这个白色对象被灰色对象指向了,就不会被漏标

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • 所以,漏标的情况只会发生在白色对象中,且满足以下任意一个条件:
    ---------------------------------------------------------------------

    我理解应该是两个条件都要满足,是充分必要的条件

    G1垃圾收集器之SATB

    简书 占小狼转载请注明原创出处,谢谢! openjdk下载 传送门 对象漏标 垃圾回收的并发标记阶段,gc线程和应用线程是并发执行的,所以一个对象被标记之后,应用线程可能篡改...

  • 用户注册和库存扣减,在一个时间切片里只有一个机房的服务处理,这不能算是双活吧?

    有货双中心双活架构实践

    有货双中心双活架构实践 一、总述 随着有货业务不断发展,有货系统架构从原来LAMP一直发展到现在基于混合公有云的双中心双活架构;在2017双十一活动中,系统在十几倍高流量的冲...

  • 120
    谈谈限流算法的几种实现

    占小狼[https://www.jianshu.com/users/90ab66c248e6/latest_articles],转载请注明原创出处,谢谢! 保障服务稳定的三大...

  • @圣杰 订单实体,address是订单的值对象

    DDD理论学习系列(7)-- 值对象

    DDD理论学习系列——案例及目录 1.引言 提到值对象,我们可能立马就想到值类型和引用类型。而在C#中,值类型的代表是strut和enum,引用类型的代表是class、int...