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

dedecms购物网站模板下载广州计算机软件公司排名

dedecms购物网站模板下载,广州计算机软件公司排名,建设网站的新闻,seo 网站 制作垃圾收集器底层算法 三色标记 在并发标记的过程中#xff0c;因为标记期间应用线程还在继续跑#xff0c;对象间的引用可能发生变化#xff0c;多标和漏标的情况就有可能发生#xff0c;这里我们引入“三色标记”来给大家解释下把Gcroots可达性分析遍历对象过程中遇到对象…垃圾收集器底层算法 三色标记 在并发标记的过程中因为标记期间应用线程还在继续跑对象间的引用可能发生变化多标和漏标的情况就有可能发生这里我们引入“三色标记”来给大家解释下把Gcroots可达性分析遍历对象过程中遇到对象按照“是否访问过”这个条件标记成下三种颜色: 黑色: 表示对象已经被垃圾收集器访问过且这个对象的所有引用都已经扫描过。黑色的对象代表已经扫描过它是安全存活的如果有其他对象引用指向了黑色对象无须重新扫描一遍。黑色对象不可能直接不经过灰色对象指向白色对象。 灰色: 表示对象已经被垃圾收集器访问过但这个对象上至少存在一个引用还没有被扫描过。 白色: 表示对象尚未被垃圾收集器访问过。显然在可达性分析刚刚开始的阶段所有的对象都是白色的若在分析结束的阶段仍然是白色的对象即代表不可达。 多标-浮动垃圾 在并发标记过程中如果由于方法运行结导致部分局部变量(gcroot)被销毁这个gcroot引用的对象之前又被扫描过(被标记为非垃圾对象)那么本轮GC不是需要等到下一轮垃圾回收会回收这部分内存。这部分本应该回收但是没有回收到的内存被称之为“浮动垃圾”。浮动垃圾并不会影响垃圾回收的正确性只是需要等到下一轮垃圾回收中才被清除。 另外针对并发标记(还有并发清理)开始后产生的新对象通常的做法是直接当成黑色本轮不会进行清除。这部分对象期间可能也会变为垃圾这也算是浮动垃圾的一部分。 漏标-读写屏障 漏标会导致被引用的对象被当成垃圾误删除,这是严重bug必须解决有两种解决方案:增量更新(Incremental Update)和原始快照(Snapshot At The Beginning,SATB) 漏标情况 增量更新就是当黑色对象插入新的指向白色对象的引用关系时就将这个新插入的引用记录下来等并发扫描结束之后再将这些记录过的引用关系中的黑色对象为根重新扫描一次这可以简化理解为黑色对象一旦新插入了指向白色对象的引用之后它就变回灰色对象了。 原始快照就是当灰色对象要删除指向白色对象的引用关系时 就将这个要删除的引用记录下来在并发扫描结束之后再将这些记录过的引用关系中的灰色对象为根 重新扫描一次这样就能扫描到白色的对象将白色对象直接标记为黑色(目的就是让这种对象在本轮GC清理中能存活下来等下一轮GC的时候重新扫描这个对象也有可能是浮动垃圾) ps删除的引用我不管就是将它变成黑色GC不会删除黑色标记的对象。等到下一轮再来判定这个对象是否为垃圾对象。如果是真的垃圾这个对象就是浮动垃圾 以上无论是对引用关系记录的插入还是删除虚拟机的记录操作都是通过写屏障实现的。 记忆集与卡表(解决跨代引用) 在新生代做GC Roots可达性扫描过程中可能会碰到跨代引用的对象这种如果又去对老年代再去扫描效率太低了。 为此在新生代可以引入记录集(Remember set)的数据结构(记录从非收集区(老年代)到收集区(eden)的指针集合)避免把整个老年代加入GCRoots扫描范围。事实上并不只是新生代、 老年代之间才有跨代引用的问题所有涉及部分区域收集(Partial GC)行为的垃圾收集器典型的如G1、ZGC和Shenandosh收集器 都会面临相同的问题。 垃圾收集场景中收集器只需通过记忆集判断出某一块非收集区域是否存在指向收集区域的指针即可,无需了解跨代引用指针的全部细节。 hotspot使用一种叫做“卡表”(Cardtable)的方式实现记忆集也是目前最常用的一种方式。关于卡表与记忆的关系可以类比为Java语言中HashMap与Map的关系。 卡表是使用一个字节数组实现:CARD TABLE[]每个元素对应着其标识的内存区域一块特定大小的内存块,称为“卡页”。卡页就是将老年代按照一块特定大小分割其中分割出来的一块空间叫做卡页。 hotSpot使用的卡页是2^9大小即512字节。 一个卡页中可包含多个对象只要有一个对象的字段存在跨代指针,其对应的卡表的元素标识就变成1表示该元素变脏否则为0。GC时只要筛选本收集区的卡表中变脏的元素加入GCRoots里。 卡表的维护 卡表变脏上面已经说了但是需要知道如何让卡表变脏即发生引用字段赋值时如何更新卡表对应的标识为1。 Hotspot使用写屏障维护卡表状态。 写屏障 卡表元素何时变脏的答案是很明确的——有其他分代区域中对象引用了本区域对象时其对应的卡表元素就应该变脏变脏时间点原则上应该发生在引用类型字段赋值的那一刻把维护卡表的动作放到每一 个赋值操作之中。 在HotSpot虚拟机里是通过写屏障Write Barrier技术维护卡表状态的。写屏障可以看作在虚拟机层面对“引用类型字段赋值”这个动作的AOP切 面在引用对象赋值时会产生一个环形Around通知也就是说赋值的前后都在写屏障的覆盖范畴内。在赋值前的部分的写屏障叫作写前屏障Pre-Write Barrier在赋值 后的则叫作写后屏障Post-Write Barrier。下面是简化的代码逻辑 void oop_field_store(oop* field, oop new_value) {// 引用字段赋值操作 *field new_value; // 写后屏障在这里完成卡表状态更新 post_write_barrier(field, new_value); }应用写屏障后虚拟机就会为所有赋值操作生成相应的指令一旦收集器在写屏障中增加了更新卡表操作无论更新的是不是老年代对新生代对象的引用每次只要对引用进行更新就会产生额外的开销不过这个开销与Minor GC时扫描整个老年代的代价相比还是低得多的。
http://www.zqtcl.cn/news/14823/

相关文章:

  • 建站工具的优点wordpress大学主题3.5
  • 个人免费网站申请注册优化 网站访问速度
  • 延吉市建设局网站从化专业做网站
  • 做我女朋友吧网站开源网站建设是什么工作
  • 中学生免费作文网站江西鄱阳专业做网站
  • 网站优化建设深圳wordpress注册邮件接收不到
  • 天河网站建设报价怎样开自己的网络平台
  • 哈尔滨市建设工程网泊头网站排名优化
  • 秦皇岛优化网站排名乐华网络公司服务内容
  • 营销网站建设整合网站营销专家Wordpress 101
  • 商丘网站建设专业现状seo实战密码在线阅读
  • 少儿教育网站建设价格绵阳建设网
  • 怎样才能创建网站中国顶尖服装设计师
  • 网站seo入门销售crm客户管理系统
  • 七色板网站建设网站开发流程分为哪三个阶段
  • 做网站都能赚钱吗本人找做钢筋笼的活网站
  • WordPress分段插件百度搜索关键词优化方法
  • 抚州网站开发网络营销能做什么?
  • 专做海报设计的网站做app网站需要什么
  • 广州网站开发外包公司怎样建网站才赚钱
  • 有经验的网站建设公司怎么搜索整个网站内容
  • 微信网站制作软件wordpress 不带主题显示
  • 网站开发英文文献重庆官方推广网站
  • 凡科网站官网建网站建网站
  • 虚拟主机网站模板字体logo设计在线生成
  • 哪些网站做商标注册网站建设公司怎么投诉
  • 主做熟人推荐的招聘网站优秀网站首页
  • 改图网站怎么在后台设置网站的关键词
  • 常熟做网站多少钱wordpress制作友情链接页面
  • 重庆门户网站有哪些国外域名注册查询