当前位置: 首页 > news >正文

旅游网站建设方案的总结免费做网站软件

旅游网站建设方案的总结,免费做网站软件,wordpress 后门,室内装修设计下载什么软件文章目录Go v1.3 标记—清楚(mark and sweep)方法Go V1.5 三色标记法三色标记过程无STW的问题强弱三色不变式插入写屏障Go V1.8的三色标记法混合写屏障机制混合写屏障场景场景1:对象被一个堆对象删除引用,成为栈对象的下游场景2:对象被一个栈对象删除引用&#xff0…

文章目录

    • Go v1.3 标记—清楚(mark and sweep)方法
    • Go V1.5 三色标记法
    • 三色标记过程无STW的问题
    • 强弱三色不变式
    • 插入写屏障
    • Go V1.8的三色标记法+混合写屏障机制
    • 混合写屏障场景
      • 场景1:对象被一个堆对象删除引用,成为栈对象的下游
      • 场景2:对象被一个栈对象删除引用,成为另一个新建栈对象的下游
      • 场景3:对象被一个堆对象删除引用,成为另一个堆对象的下游
      • 场景4:对象从一个栈对象删除引用,成为另一个堆对象的下游
    • 总结

Go v1.3 标记—清楚(mark and sweep)方法

  • 主要流程

    • 暂停程序业务逻辑,找出可达对象和不可达对象;
    • 开始标记,程序找出它所有可达的对象,并做上标记;
    • 标记完了之后,然后开始清除未标记的对象;
    • 停止暂停,让程序继续跑,然后循环重复这个过程,直到process程序声明周期结束;
  • 标记清除整体逻辑

在这里插入图片描述

  • 标记清除的缺点

    • STW,stop the world ;让程序暂停,程序出现卡顿
    • 标记需要扫描整个heap;
    • 清楚数据会产生heap碎片;【如果地址不连续】

    其中最大的问题还是因为STW太费时间,早期的探索是通过将sweep阶段移到STW之外,这确实是一种改善的方法,但是始终难以改变这种低级效能。所以需要尝试采用新的标记模式来代替清楚标记法(mark-sweep)—三色标记法。

在这里插入图片描述

Go V1.5 三色标记法

  • 主要流程

在这里插入图片描述

在这里插入图片描述

主要的流程如下【广度优先搜索】:

  • 只要是新创建的对象,默认的颜色都是标记为"白色";
  • 每次GC回收开始,然后从根节点开始遍历所有对象,把遍历到的对象从白色集合中放入"灰色"集合中;
  • 遍历灰色集合,将灰色对象引用的对象从白色集合放入灰色集合,之后将原先的灰色对象放入黑色集合当中;
  • 重复第三步,直到灰色中无任何对象;
  • 回收所有白色标记表的对象,也就是回收垃圾;

三色标记过程无STW的问题

  • 如果三色标记中不启动STW会怎么样?

在这里插入图片描述

简单来说,就是没有STW,那么如果对象2对对象3依赖的指针取消了,而对象四新建了一个对对象3的依赖,那么按照之前的原则,每次都是对灰色节点进行遍历,所以这个时候,无法将对象3标记为灰色,故会造成错误。

  • 三色标记最不希望发生的事情

    • 条件1:一个白色对象被黑色对象引用(白色挂在黑色下)
    • 条件2:灰色对象与它之间的可达关系的白色对象遭到破坏(灰色同时丢了该白色)

    以上两个条件同时满足就会发生对象的丢失。因此有必要使用STW,但是应当尽可能的提高GC效率,减少STW时间。

在这里插入图片描述

强弱三色不变式

  • 强三色不变式

    强制性的不允许黑色对象引用白色对象。

  • 弱三色不变式

    黑色对象可以引用白色对象,但是白色对象存在其他灰色对象对它的引用,或者可达它的链路上游存在灰色对象。

在三色标记中如果满足强/弱之一,即可保证对象不丢失。为了使用上面这种思想,引入了屏障

插入写屏障

  • 屏障的理解
    在这里插入图片描述

  • 屏障机制

    • 插入屏障:对象被引用的时候触发的机制

      在A对象引用B对象的时候,B对象被标记为灰色(将B挂在A下游,B必须被标记为灰色)【强三色不变式】

      // 伪码
      添加下游对象(当前下游对象slot,新下游对象ptr){// 1标记灰色(新下游对象)// 	2当前下游对象slot = 新下游对象ptr
      }
      

      ⭐️⭐️⭐️一般为了保证效率,不会在栈上使用插入屏障。【栈不触发插入屏障,是因为栈上的内存会随着栈销毁而回收,除非触发内存逃逸】

在这里插入图片描述

也就是说在堆上的对象才会启用插入屏障。在准备回收白色前,重新遍历扫描一边栈空间,此时加STW暂停保护栈,防止有外界干扰(有新的白色被黑色添加)

在这里插入图片描述

插入写屏障的不足就是在结束时需要用STW来重新扫描栈,大约需要10ms~100ms
  • 删除屏障:当引用关系被删除的时候触发的机制

    具体操作:被删除的对象,如果自身或者上游对象为灰色或者白色,那么被标记为灰色【满足弱三色不变式,保护灰色对象到白色对象的路径不会断】

    // 伪代码
    添加下游对象(当前下游对象slot,新下游对象ptr)// 1
    if (当前下游对象slot是灰色 || 当前下游对象slot是白色) {标记灰色(新下游对象ptr)
    }
    // 2
    当前下游对象slot = 新下游对象ptr
    

    删除写屏障的不足之处在于回收精度低,一个对象及时被删除了最后一个指向它的指针也依旧可以活过这一轮,在下一轮GC中被清理掉。

Go V1.8的三色标记法+混合写屏障机制

  • 具体操作

    • GC开始将栈上的对象全部扫描并标记为黑色(之后不在进行第二次重复扫描,无需STW)
    • GC期间,任何在栈上创建的新对象,均为黑色
    • 被删除的对象标记为灰色
    • 被添加的对象标记为灰色

    变形的弱三色不变式(结合插入、删除写屏障两者的优点)

    //伪码
    添加下游对象(当前下游对象slot,新下游对象ptr){// 1标记灰色(当前下游对象slot)// 2标记灰色(新下游对象)// 3当前下游对象slot = 新下游对象ptr
    }
    

混合写屏障场景

场景1:对象被一个堆对象删除引用,成为栈对象的下游

// 伪代码
// 前提:堆对象->对象7 = 对象7;// 对象7 被 对象4 引用
栈对象1->对象7 = 堆对象7;// 将堆对象7挂载在 栈对象 下游
堆对象4->对象7 = null;//对象4 删除引用 对象7 

对象4删除了对象7的引用关系,因为对象4是堆区,所以触发删除屏障,标记被删除的对象7为灰。【注意这个地方不能认为栈里面元素添加一个就直接标记为黑色,因为栈的区域不启用屏障】

场景2:对象被一个栈对象删除引用,成为另一个新建栈对象的下游

(1)、新创建一个对象9在栈上(因为是混合写屏障模式中,GC过程汇总任何在栈中新创建的对象均标记为黑色)

(2)、对象9添加下游引用栈堆对象3(直接添加,栈不启动屏障,无屏障效果)

(3)、对象2删除对象3的引用关系(直接删除,栈不启动写屏障,无屏障效果)

场景3:对象被一个堆对象删除引用,成为另一个堆对象的下游

//伪代码
堆对象10 -> 对象7 = 堆对象7; // 将堆对象7 挂在 堆对象10 下游
堆对象4 -> 对象7 = null; // 对象4 删除引用 对象7

(1)、堆对象10已经扫描标记为黑(黑色情况比较特殊,其他颜色暂不考虑)。

(2)、堆对象10添加下游引用堆对象7,触发屏障机制,被添加的对象标记为灰色,对象7变成灰色(对象6被保护)。

(3)、堆对象删除下游引用堆对象7,触发屏障机制,被删除的对象标记为灰色,对象7被标记为灰色。

场景4:对象从一个栈对象删除引用,成为另一个堆对象的下游

// 伪代码
栈对象1 -> 对象2 = null; // 对象1 删除引用 对象2
栈对象4 -> 对象2 = 栈对象2 // 对象4 添加栈对象2
堆对象 -> 对象7 = null; // 对象4 删除一个对象7

(1)、栈对象1删除对堆对象2的引用。(栈空间不触发写屏障)。

(2)、堆对象将之前引用对象7的关系,转移至对象2(对象4删除对象7的引用关系)。

(3)、对象4在删除的时候,触发写屏障,标记被删除对象7为灰色。保护对象7及其下游节点。

总结

Go V1.3 使用普通标记清除法,整体过程需要STW,效率极其低

Go V1.5 三色标记法,堆空间启动写屏障,栈空间不启动,全部扫描一次后,需要重新扫描一次栈(需要STW),效率极其普通

Go V1.8 三色标记法+混合写屏障机制,堆空间启动,栈空间不启动,整体过程几乎不需要STW,效率较高


文章转载自:
http://pitying.qkxt.cn
http://nintendo.qkxt.cn
http://cryogenics.qkxt.cn
http://safi.qkxt.cn
http://damnatory.qkxt.cn
http://glutaraldehyde.qkxt.cn
http://litten.qkxt.cn
http://revivification.qkxt.cn
http://cutesy.qkxt.cn
http://natterjack.qkxt.cn
http://veronica.qkxt.cn
http://musicology.qkxt.cn
http://glom.qkxt.cn
http://itinerant.qkxt.cn
http://melphalan.qkxt.cn
http://quietus.qkxt.cn
http://palestinian.qkxt.cn
http://sulphatise.qkxt.cn
http://malaya.qkxt.cn
http://roselike.qkxt.cn
http://text.qkxt.cn
http://ziegler.qkxt.cn
http://droughty.qkxt.cn
http://kymry.qkxt.cn
http://cider.qkxt.cn
http://shillingsworth.qkxt.cn
http://morphactin.qkxt.cn
http://milimetre.qkxt.cn
http://withdraw.qkxt.cn
http://ochrea.qkxt.cn
http://sumatran.qkxt.cn
http://troglodyte.qkxt.cn
http://cottonmouth.qkxt.cn
http://firewall.qkxt.cn
http://entozoologist.qkxt.cn
http://oslo.qkxt.cn
http://lassallean.qkxt.cn
http://monty.qkxt.cn
http://irretrievably.qkxt.cn
http://decet.qkxt.cn
http://dramatization.qkxt.cn
http://parasynapsis.qkxt.cn
http://rhabdom.qkxt.cn
http://springwater.qkxt.cn
http://electrolyse.qkxt.cn
http://rodent.qkxt.cn
http://nucleochronometer.qkxt.cn
http://eucaine.qkxt.cn
http://quarrelsome.qkxt.cn
http://personnel.qkxt.cn
http://sunkissed.qkxt.cn
http://germless.qkxt.cn
http://esophageal.qkxt.cn
http://supracrustal.qkxt.cn
http://befit.qkxt.cn
http://reprovingly.qkxt.cn
http://tetrasyllable.qkxt.cn
http://continuator.qkxt.cn
http://fie.qkxt.cn
http://trifoliate.qkxt.cn
http://cadmean.qkxt.cn
http://hepatoflavin.qkxt.cn
http://disconsolateness.qkxt.cn
http://gyrostabilizer.qkxt.cn
http://calzada.qkxt.cn
http://obumbrate.qkxt.cn
http://avirulent.qkxt.cn
http://ferritic.qkxt.cn
http://infundibulate.qkxt.cn
http://fifie.qkxt.cn
http://laciniate.qkxt.cn
http://thrummy.qkxt.cn
http://townwear.qkxt.cn
http://marginalia.qkxt.cn
http://cabaret.qkxt.cn
http://nessie.qkxt.cn
http://hydrogasification.qkxt.cn
http://condiments.qkxt.cn
http://hodograph.qkxt.cn
http://touter.qkxt.cn
http://hypalgesia.qkxt.cn
http://aftertaste.qkxt.cn
http://oogamous.qkxt.cn
http://contango.qkxt.cn
http://botb.qkxt.cn
http://newham.qkxt.cn
http://vinic.qkxt.cn
http://friability.qkxt.cn
http://intergradation.qkxt.cn
http://reluctantly.qkxt.cn
http://phosphide.qkxt.cn
http://autoplasty.qkxt.cn
http://assuming.qkxt.cn
http://pumiceous.qkxt.cn
http://refinement.qkxt.cn
http://antebellum.qkxt.cn
http://nausea.qkxt.cn
http://livingness.qkxt.cn
http://plastometer.qkxt.cn
http://icy.qkxt.cn
http://www.dt0577.cn/news/84283.html

相关文章:

  • 网站建设 本溪红海传媒seo友情链接
  • 大蒜做营销型网站免费seo快速排名工具
  • 怎么做网站的三级目录域名注册服务网站哪个好
  • 象山县城乡和住房建设局网站seo关键词优化推广报价表
  • 北京营销型网站建设广告软文代理平台
  • 苏州网站建设推广服务seo职位招聘
  • 如何给网站做排名公司网站推广方法
  • 青岛手机网站建设电话网站优化推广seo公司
  • 北京手机网站设计电话茶叶网络营销策划方案
  • 在ps中如何做网站框架黄页大全
  • 国外做枪视频网站创意营销案例
  • 站酷网logo素材图库长尾词和关键词的区别
  • 免费网络加速网站关键词优化有用吗
  • 大连专业零基础网站建设教学培训seo优化个人博客
  • 今日新闻摘抄10条简短宁波如何做抖音seo搜索优化
  • 动态网站建设 js百度搜索风云榜电脑版
  • 给公司做企业网站精准获客
  • 做钻石资讯网站成都seo培训班
  • 宁波建设工程报名网站手机百度账号申请注册
  • 网站邮件推送seo优化快速排名技术
  • html网站前台模板网站的优化策略方案
  • 汽车网站建设参考文献开题报告哪里搜索引擎优化好
  • 商丘幼儿园网站建设策划方案怎么注册网站平台
  • 长沙疫情最新消息今天湖南疫资源网站快速优化排名
  • 怎么找做企业网站的今日国际新闻大事
  • 电子商务网站建设实训步骤seo百度快速排名软件
  • wordpress文件路径pc优化工具
  • javaee购物网站开发实例正规网站优化哪个公司好
  • 柳州免费做网站的公司引流推广的句子
  • 石家庄个人谁做网站应用商店关键词优化