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

鄂尔多斯网站制作 建设京东网站建设吗

鄂尔多斯网站制作 建设,京东网站建设吗,建行门户网站,东莞市手机网站建设怎么样术语介绍 赋值器:说白了就是你写的程序代码#xff0c;在程序的执行过程中#xff0c;可能会改变对象的引用关系#xff0c;或者创建新的引用。 回收器:垃圾回收器的责任就是去干掉那些程序中不再被引用得对象。 STW:全称是stop the word#xff0c;GC期间某个阶段会停止…术语介绍 赋值器:说白了就是你写的程序代码在程序的执行过程中可能会改变对象的引用关系或者创建新的引用。 回收器:垃圾回收器的责任就是去干掉那些程序中不再被引用得对象。 STW:全称是stop the wordGC期间某个阶段会停止所有的赋值器中断你的程序逻辑以确定引用关系。即STW停止程序运行。 root对象:根对象是指不需要通过其他对象就可以直接访问到的对象通过root对象, 可以追踪到其他存活的对象。 常见的root对: 全局变量程序在编译期就能确定的那些存在于程序整个生命周期的变量这些变量是可能引用堆上的对象或者是指针指向堆上的变量。执行栈每个 goroutine (包括main函数)都拥有自己的执行栈这些执行栈上包含栈上的变量(这些变量本身就可能内存逃逸到堆上或者引用堆上的变量)及指向堆内存地址的指针变量。寄存器寄存器的值可能是一个指针而这个指针可能指向堆内存地址。 标记清除法(V1.3) 步骤 开启STW从根对象开始标记对象清除未被标记的对象关闭STW 缺点 GC期间全程STWGC和用户程序互相干扰不能同时执行。 三色标记法 背景 基于标记清除算法的缺点Golang团队对GC算法进行优化减少STW以便GC和用户程序可以互不干扰并发进行于是就产生了三色标记法。 步骤 GC开始前所有对象都都被标记为白色GC开始时把所有根对象标记为灰色GC进行时遍历灰色对象把灰色对象可达的对象标记为黑色把自己标记为黑色重复第3步直到标记完所有对象GC结束时回收白色对象 缺点 上述三色标记法仍然需要STW因为我们的应用程序会改变对象的应用关系从而影响标记结果的正确性。 比如 一个白色对象被灰色对象引用此时有一个黑色对象改变引用指向这个白色对象而灰色对象到白色对象之间的引用关系又被破坏了此时这个白色对象只被一个黑色对象引用这个白色对象不可能会标记了因此该白色对象丢失 总结 其实总结来看在三色标记法的过程中对象丢失需要同时满足下面两个条件 条件一白色对象被黑色对象引用 条件二灰色对象与白色对象之间的可达关系遭到破坏 看来只要把上面两个条件破坏掉一个就可以保证对象不丢失。可以使用插入写屏障和删除写屏障来破坏上面其中一个条件。 插入写屏障 规则当一个对象引用另外一个对象时将另外一个对象标记为灰色。 解释用来破坏条件一单黑色对象引用白色对象是白色对象就被标记成了灰色对象就不可能出现条件一这种情况出现。 注意 插入屏障仅会在堆内存中生效不对栈内存空间生效。这是因为go在并发运行时大部分的操作都发生在栈上函数调用会非常频繁。数十万goroutine的栈都进行屏障保护自然会有性能问题。 我要补充一下“生效”的具体意思如果一个变量是在堆中如果它改变引用关系指向到另一个对象我们把这个被指向的对象设置为灰色如果一个变量在栈中如果它改变引用关系指向到另一个对象由于插入写屏障不生效所以不用改变被引用的对象颜色为灰色 但是正是因为没有改变为灰色所以才要在GC结束时打开STW重新扫描栈如果栈和堆都使用插入写屏障那就不用扫描重新扫描栈了但是栈上打开STW效率太低了。 步骤 GC开始时堆打开插入写屏障栈不打开GC期间 三色标记法进行标记GC期间堆中对象改变它的应用关系到另外一个对象则把这个“另外对象”给标记为灰色GC结束时打开STW重新扫描栈中对象进行扫描标记GC结束时进行垃圾回收 缺点GC结束时需要打开STW重新扫描栈保证引用的白色对象存活主要保证的是堆中白色对象存活和栈中变量对逃逸到堆中的白色象这些白色对象的产生是因为栈没开插入写屏障。 删除写屏障 规则在删除引用时如果被删除引用的对象自身为灰色或者白色那么被标记为灰色。 解释用来破坏条件二同过把被删除引用的对象设置为灰色把这个被删除引用的对象自己当成可达的那么相当于可达对象被删除引用的这个对象到白色对象被删除引用的这个对象原本就能遍历/访问到的其他对象之间的可达关系又重新建立起来来。这个被删除引用的对象和它能到达的一些对象都保护了起来因此就破坏了条件二。 步骤 GC开始时STW 扫描整个栈所有协程的栈保证所有堆上在用的对象都处于灰色保护下保证的是弱三色不变式GC期间三色标记GC期间某个对象原本引用对象A后来改变引用到对象B则把B对象设置为灰色GC结束时进行垃圾回收 缺点 由于起始快照的原因起始也是执行 STW删除写屏障不适用于栈特别大的场景栈越大STW 扫描时间越长对于现代服务器上的程序来说栈地址空间都很大所以删除写屏障都不适用一般适用于很小的栈内存比如嵌入式物联网的一些程序并且删除写屏障会导致扫描进度波面的后退所以扫描精度不如插入写屏障 注意 在上面的GC步骤1为什么要STW 扫描整个栈所有协程的栈这个问题我说一点我个人的猜测吧毕竟网上查了半天也没有一个人能说明白的有朋友明白原因的麻烦告知一下 首先在说删除写屏障之前时有一个大前提就是不能在栈中使用删除写屏障只在堆中使用。 当我们开启STW后把所有栈道对象都染为黑色那么栈对象直接引用的所有堆对象都被染色成了灰色如下图灰色部门。 因此所有的不是垃圾的堆对象都处于灰色的保护状态中上图蓝色和绿色部分换句话说就是每个堆中的对象都至少被一个灰色对象直接或间接引用。 当堆中的引用关系发生变化时根据删除写屏障把被改变引用的那个堆对象变成灰色就能一定破坏“条件二了” 我们举个反向例子初始状态有2个协程栈 A 是 g1 栈的一个对象g1栈已经扫描完了并且 C 也是扫黑了的对象 B 是 g2 栈的对象指向了 C 和 Dg2 完全还没扫描B 是一个灰色对象D 是白色对象 步骤一g2 进行赋值变更把 C 指向 D 对象这个时候黑色的 C 就指向了白色的 D由于是删除屏障这里是不会把D染色为灰色 步骤二把 B 指向 D 的引用删除由于是栈对象操作不会触发删除写屏障(这里我们讨论的大前提是对栈是不使用删除写屏障的即使把B到D引用关系删除了也不会把D染成灰色) 步骤三GC结束时因为 C 已经是黑色对象了所以不会再扫描所以 D 仍然为白色就会被错误的清理掉。 总结 那么如果我不想一次把所有的协程栈都暂停就会产生上面例子中的问题有什么办法可以解决上面的例子中的问题吗在不同时暂停所有协程栈道情况下这个当然是有的。 解决办法就是使用三色标记法插入写屏障删除写屏障 需要注意混合写屏障扫描栈虽然没有 STW但是扫描某一个具体的栈的时候还是要停止这个 goroutine 赋值器的工作的哈针对一个 goroutine 栈来说是暂停扫的要么全灰要么全黑哈原子状态切换 我们根据上面的这幅图可以看出只要我们在目前的GC策略上再添加上插入写屏障当前的GC策略是三色标记法删除写屏障在C引用D时直接把D染为灰色就能解决所有问题了。 三色标记法插入写屏障(V1.5) 插入写屏障机制和删除写屏障机制中任一机制均可保护对象不被丢失。在V1.5的版本中采用的是插入写机制实现。 三色标记法混合写屏障(V1.8) 背景 从上面的分析中我可以知道 插入写屏障可以做用户程序和GC同时运行什么都好就是要在GC结束时重新扫描栈中的根对象防止堆中的变量被释放 删除写屏障也可以做用户程序和GC同时运行但是需要在GC开始前把所有的协程栈暂停这对协程数量非常多的时候是不可接受的。 那么有没有一种方法在GC开始的时候不需要STW 扫描整个栈把整个栈中的对象标记为黑色在程序结束时不需要再次重新扫描栈以防止对象丢失并且GC程序可以和用户程序同时运行 这种方法就是我们的三色标记法混合写屏障了 步骤 GC开始时优先扫描将栈将栈上可达对象标记为黑色。扫描某个 goroutine 时停止这个 goroutine 赋值器的工作。即goroutine看来是原子操作瞬间全灰/黑。栈扫描完成后解锁。GC期间栈上新建的对象都为黑色堆上被删除的对象标记为灰色堆上新添加的对象标记为灰色 注意写屏障插入、删除写屏障只在堆上启用栈上不开启写屏障 优点 不用在开始时像删除写屏障那样需要同时STW所有协程来标记根栈上的根对象不用在结束时像插入写屏障那样需要再次打开STW重新扫描栈保证引用的白色对象存活
http://www.hkea.cn/news/14457462/

相关文章:

  • 青浦php网站开发培训软件开发主要几个步骤
  • 公司网站建设步骤栾川网站建设
  • 企业门户网站开发平台的设计与实现培训机构官网
  • 网站开发与设计论文seo公司外包
  • html嵌入网站企业代运营公司
  • 美食网站素材刚刚发生 北京严重发生
  • 网站换行代码短网址生成器是什么
  • 网站开发还找到工作吗网站左侧的导航是怎么做的
  • 兰州网站排名公司百度一下首页网页手机版
  • 网站建设公司 青岛wordpress媒体文件夹
  • 律师做网站费用微信网站开发系统
  • 合肥网站建设高端秦皇岛网站制作哪个好
  • 聚合影视网站建设wordpress加密视频
  • 高端文化网站美观网站建设物美价廉
  • 网站 关键词 地区wordpress 模板检测
  • 做网站时的兼容问题有了域名如何建网站
  • 织梦网站怎样做锚文本企业网站制作哪些公司制作
  • 男士手表网站动漫网页设计代码
  • 中山做网站专业的公司河南软件开发公司有哪些
  • 我想自己做的知道网站福州做网站公司排名
  • 周口 网站建设中山网站备案
  • 自己做的网站访问不了正在建设中的网站
  • 戴尔网站建设的特点广西城市网
  • 徐州制作网站的公司有哪些廊坊永清网站建设
  • 如何管理网站后台保健品手机网站模板
  • 网站的类型及特点第三方电子商务平台有哪些优势
  • 产品做推广一般上什么网站怎么推广效果好呢网站怎么做推广
  • 免费做销售网站有哪些济南的网站建设公司
  • 义乌设计网站如何自己开网址
  • 公司使用威联通nas做网站存储一个网站建设的流程