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

湛江做网站设计做网站比较好的公司有哪些

湛江做网站设计,做网站比较好的公司有哪些,做毕业设计的参考文献网站,手机app安装下载软件内存垃圾的产生 程序在内存上被分为堆区、栈区、全局数据区、代码段、数据区五个部分。对于C等早期编程语言栈上的内存回由编译器负责管理回收,而堆上的内存空间需要编程人员负责申请和释放。在Go中栈上内存仍由编译器负责管理回收,而堆上的内存由编译器…

内存垃圾的产生

程序在内存上被分为堆区、栈区、全局数据区、代码段、数据区五个部分。对于C++等早期编程语言栈上的内存回由编译器负责管理回收,而堆上的内存空间需要编程人员负责申请和释放。在Go中栈上内存仍由编译器负责管理回收,而堆上的内存由编译器和垃圾收集器负责管理回收,给编程人员带来了极大的便利性。

 垃圾是指程序向堆栈申请的内存空间,随着程序的运行已经不再使用这些内存空间,这时如果不释放它们就会造成垃圾,也就是内存泄漏。

 package main//假设每个人都拥有自己都一部手机type Person struct {phone *Phone}type Phone struct {money int}func main() {//定义一个Person为超超chao := new(Person)//超超一开始用的是iphone12iphone := &Phone{money: 6599}chao.phone = iphone//华为推出了鸿蒙,于是超超果断入了一部mate40huawei := &Phone{money: 5899}chao.phone = huawei}

随着超超将手机从iphone换成了华为,phone指向的内存空间就变成了垃圾,这时就需要对phone指向的内存空间进行回收,否则就变成了内存泄漏。


Golang垃圾回收机制

Go1.3采用的标记清除法,Go1.5采用三色标记法,Go1.8采用三色标记法+混合写屏障


标记清除法

分为两个阶段:标记和清除

标记阶段:从根对象出发寻找并标记所有存活的对象。

清除阶段:遍历堆中的对象,回收未标记的对象,并加入空闲链表

缺点:需要暂停程序STW

步骤:

  1. 进行STW(暂停程序业务逻辑),然后从main函数开始找到不可达的内存占用和可达的内存占用
  2. 开始标记,程序找出可达内存占用并标记
  3. 标记结束,清除未标记的内存占用
  4. 结束STW停止暂停,让程序继续执行,循环该过程直到main生命周期结束。

 一开始的做法是将垃圾清理结束时才停止STW,后来优化了方案将清理垃圾放到了STW之后,与程序运行同时进行,这样做减少了STW的时长。但是STW会暂停用户逻辑对程序的性能影响是非常大的,这种粒度的STW对于性能较高的程序还是无法接受,因此Go1.5采用了三色标记法优化了STW。


三色标记法

将对象标记为白色,灰色和黑色

白色:不确定对象(默认色) ;黑色:存活对象;灰色:存活对象,子对象待处理

步骤:

  1. 将所有对象标记为白色
  2. 从根节点集合出发,将第一次遍历到的节点标记为灰色放入到集合列表中
  3. 遍历灰色集合,将灰色节点遍历到的白色节点标记为灰色,并把灰色节点标记为黑色、
  4. 循环整个过程
  5. 直到灰色节点集合为空,回收所有白色节点

这种方法有个缺陷:如果对象的引用被用户修改了,那么之前的标记就无效了。

分析bug的根源所在,主要是因为程序在运行过程中出现了下面俩种情况

  1. 一个白色对象被黑色对象引用
  2. 灰色对象与它之间的可达关系的白色对象遭到破坏

因此在此基础上拓展出了俩种方法,强三色不变式和弱三色不变式

  1. 强三色不变式:不允许黑色对象引用白色对象
  2. 弱三色不变式:黑色对象可以引用白色,白色对象存在其他灰色对象对他的引用,或者他的链路上存在灰色对象

为了实现这俩种不变式的设计思想,从而引出了屏障机制,即在程序的执行过程中加一个判断机制,满足判断机制则执行回调函数。

 屏障机制分为插入屏障删除屏障,插入屏障实现的是强三色不变式,删除屏障则实现了弱三色不变式。值得注意的是为了保证栈的运行效率,屏障只对堆上的内存对象启用,栈上的内存会在GC结束后启用STW重新扫描。

插入屏障:对象被引用时触发的机制,当白色对象被黑色对象引用时,白色对象被标记为灰色(栈上对象无插入屏障)

缺点在于:如果对象1在栈上新创建了一个对象6,由于栈没有屏障机制,所以对象6仍为白色节点会被回收

所以栈在GC迭代结束时(没有灰色节点),会对栈执行STW,重新进行扫描清除白色节点。(STW时间为10-100ms) 

删除屏障:对象被删除时触发的机制。如果灰色对象引用的白色对象被删除时,那么白色对象会被标记为灰色

缺点:这种做法回收精度较低,一个对象即使被删除仍可以活过这一轮再下一轮被回收。(如果对象4没有引用对象3,此时对象3应该作为垃圾被回收,但是对象3却要等到下一轮GC才会被回收)

同样也存在对栈的二次扫描影响程序的效率。


三色标记+混合写屏障技术

基于插入写屏障和删除写屏障在结束时需要STW来重新扫描栈,所带来的性能瓶颈,Go在1.8引入了混合写屏障的方式实现了弱三色不变式的设计方式,混合写屏障分下面四步

  1. GC开始时将栈上可达对象全部标记为黑色(不需要二次扫描,无需STW)
  2. GC期间,任何栈上创建的新对象均为黑色
  3. 被删除引用的对象标记为灰色
  4. 被添加引用的对象标记为灰色

http://www.qdjiajiao.com/news/189.html

相关文章:

  • 网站建设套餐怎么样网络营销的具体形式种类
  • 做网站需要哪些基本功能无代码建站
  • 兰州网站建设优化网页设计代码
  • wps做网站框架今日百度小说排行榜
  • 中国核工业华兴建设公司网站北京网络营销推广培训哪家好
  • 上海商业网站建设费用关键词排名
  • 上海 设计网站建设什么是网络营销的核心
  • 北滘做网站2023年8月疫情又开始了吗
  • 域名网站搭建免费换友情链接
  • 网站预订功能怎么做百度搜索引擎服务项目
  • 租号网站开发成本班级优化大师下载
  • 苏州网站建设推广服务seo建站技术
  • 网站制作长沙软广告经典案例
  • 网站建设的过程有哪些官方进一步优化
  • 让你有做黑客感觉的网站今日重点新闻
  • 大学生网站开发目的免费建站
  • 廊坊网站搜索优化推广网站要注意什么
  • 怎样做网站宣传深圳今日重大新闻
  • html5做网页网站百度网站收录查询
  • 中企动力网站建设注册一个公司网站需要多少钱
  • 做网站成品百度一下首页登录
  • 北京建设信源官方网站seo推广软件下载
  • 搭建电商分销系统seo短视频网页入口引流网站
  • 购物网站的详细设计百度一下你就知道百度官网
  • office 网站制作苏州网站建设公司
  • 做动态网站有什么较好的主题识图找图
  • 手写字体在线生成器淘宝seo搜索引擎优化
  • 网站后台首页游戏推广员每天做什么
  • 怎么能查到网站是哪个公司做的江门seo网站推广
  • 简约型网站建设图片外链生成