内存泄漏

什么是内存泄漏

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在

哪些操作会造成内存泄漏?

1、垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

2、setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

3、闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

js 内存泄漏的解决方式

1、global variables:对未声明的变量的引用在全局对象内创建一个新变量。在浏览器中,全局对象就是 window。

(1)解决:

            ①创建意外的全局变量

            ②可以在 JavaScript 文件开头添加 “use strict”,使用严格模式。这样在严格模式下解析JavaScript 可以防止意外的全局变量。

            ③在使用完之后,对其赋值为 null 或者重新分配。

2、被忘记的 Timers 或者 callbacks在JavaScript 中使用 setInterval 非常常见。大多数库都会提供观察者或者其它工具来处理回调函数,在他们自己的实例变为不可达时,会让回调函数也变为不可达的。对于 setInterval,下面这样的代码是非常常见的:

这个例子阐述着 timers 可能发生的情况:计时器会引用不再需要的节点或数据

3、闭包:一个可以访问外部(封闭)函数变量的内部函数。

JavaScript 开发的一个关键方面就是闭包:一个可以访问外部(封闭)函数变量的内部函数。

由于 JavaScript 运行时的实现细节,可以通过以下方式泄漏内存:

4、DOM 引用

有时候,在数据结构中存储 DOM 结构是有用的。假设要快速更新表中的几行内容。将每行 DOM 的引用存储在字典或数组中可能是有意义的。当这种情况发生时,就会保留同一 DOM 元素的两份引用:一个在 DOM 树种,另一个在字典中。如果将来某个时候你决定要删除这些行,则需要让两个引用都不可达。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容