首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于浏览器垃圾收集算法的混淆

关于浏览器垃圾收集算法的混淆
EN

Stack Overflow用户
提问于 2013-11-25 06:29:00
回答 1查看 80关注 0票数 2

根据Javascript:最终指南,有两种垃圾收集方法:

Mark-and-SweepReference Counting,在早期浏览器中,垃圾收集是通过引用计数来执行的。

但是为什么他们会求助于Mark and sweep呢?我认为集合的情况是一样的,当一个值不可达时,它的引用计数是零。

那有什么区别呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-25 06:41:57

引用计数是查找垃圾对象的一种简单的启发式方法,但它并不完美。特别是,引用计数可能导致引用周期,其中不可访问对象的循环都指向另一个对象。当发生这种情况时,对象的所有折算都是非零的,因此对象永远不会被清理,尽管这些对象确实是垃圾。Firefox 2使用纯引用计数来收集垃圾,随着时间的推移,由于引用周期开始消耗所有内存,导致大量内存泄漏。

标记和扫描没有这个问题,因为它显式地从所有已知的可到达位置开始查找所有可访问对象。它可以很好地处理引用周期,尽管运行速度较慢。引用计数(快速但不准确)加上标记和扫描(缓慢但完美)的组合是一个很好的折衷方案。

也就是说,还有更好的GC技术。搜索“世代垃圾收集”,寻找一些更好的混合技术。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20186087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档