分享更有价值
被信任是一种快乐

JS中的内存泄漏与垃圾回收机制实例分析

文章页正文上

今天小编给大家分享一下JS中的内存泄漏与垃圾回收机制实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
JS中的内存泄漏是什么?
内存泄漏:就是用动态存储分配函数动态开辟的内存空间,使用完后没有及时回收,导致一直占据着内存单元,数量多了后就会造成内存泄漏
JS中的垃圾回收是什么?
垃圾回收机制,就是不定期的寻找到不再使用的变量,然后释放掉他们所指向的内存,防止内存泄漏
总结:垃圾回收虽然可以找到一些不再使用的局部变量回收,但是它无法对全局变量、Dom元素引用、闭包等进行回收处理,所以这也是导致内存泄漏的一个重要原因。
下面向大家介绍一下垃圾回收的两个算法:
一、引用计数
IE采用的引用计数算法, 定义了“内存不再使用”这个标准,当一个对象没有其它任何变量指向它的时候,就说明这个对象以及不再被使用了,此时会进行垃圾回收释放内存空间。举个例子:
// 创建一个对象person, person指向一块内存空间, 该内存空间的引用数 +1
let person = {
age: 22,
name: ‘ifcode’
}
let p = person // 两个变量指向一块内存空间, 该内存空间的引用数为免费云主机、域名 2
person = 1 // 原来的person对象被赋值为1,对象内存空间的引用数-1,
// 但因为p指向原person对象,还剩一个对于对象空间的引用, 所以对象它不会被回收
p = null // 原person对象已经没有引用,会被回收
但是引用技术有一个致命的弊端就是:无法解决循环引用的问题。
如果两个对象相互引用,及时他们已经不再使用了,垃圾回收器也不会对他们进行处理,导致内存泄漏:
上图中对象o1与对象o2进行了循环引用,当代码执行完毕后,o1和o2未被引用就会释放掉,但是o1里面的a可以通过o1和o2.a同时访问到,此时就出现了循环引用的问题,虽然o1和o2两个对象被释放掉了,但对象里面的两个a还是互相引用的状态,浏览器会误以为这两块内存仍然被使用着,此时就造成了内存泄漏。
二、标记清除
上面讲到了因为引用技术有循环引用这个隐藏大bug,所以当下它已经不再被使用了,目前浏览器采用的垃圾回收算法是标记清除
标记清除法:将“不再使用大的对象”这个概念修改为“无法达到的对象”
就是说凡是从根部能到达的对象都还是使用的,那些无法由根部(JS全局中)出发触及到的对象被标记为不再使用,稍后进行回收。以上就是“JS中的内存泄漏与垃圾回收机制实例分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注云技术行业资讯频道。

相关推荐: HTML中rt标签如何使用

这篇文章主要介绍了HTML中rt标签如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 HTML标签 实例 一个ruby注释: 汉 (Han) 字 (z免费云主机、域名i) 浏览器支持 IE…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册