深入理解 JS 垃圾回收(3)

确保占用最少的内存可以让页面获得更好的性能。而优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据。一旦数据不再有用,最好通过将其值设置为 null 来释放其引用——这个做法叫做解除引用(dereferencing)

function createPerson(name){ var localPerson = new Object(); localPerson.name = name; return localPerson; } var globalPerson = createPerson("Nicholas"); // 手动解除 globalPerson 的引用 globalPerson = null;

解除一个值的引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。

2.提供手动清空变量的方法

var leakArray = []; exports.clear = function () { leakArray = []; }

3.在业务不需要用到的内部函数,可以重构在函数外,实现解除闭包
4.避免创建过多生命周期较长的对象,或将对象分解成多个子对象

5.避免过多使用闭包

6.注意清除定时器和事件监听器

7.Nodejs 中使用 stream 或 buffer 来操作大文件,不会受 Nodejs 内存限制

8.使用 redis 等外部工具缓存数据

总结

JS 是一门具有自动垃圾收集的编程语言,在浏览器中主要通过标记清除方法来回收垃圾,NodeJs 中主要通过分代回收、Scavenge、标记清除、增量标记等算法来回收垃圾。在日常开发中,有一些不引人注意的书写方式可能会导致内存泄漏,需要多注意自己的代码规范。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0840acebe0fd46a3db0dca966204cb7a.html