垃圾回收的必要性
当创建字符串、数组或对象时都会占用内存。内存的容量是有限的,如果变量、函数等只有产生没有消亡的过程,那就会造成系统崩溃
垃圾回收机制
垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存。
垃圾回收策略
现在各大浏览器通常用采用的垃圾回收有两种方法:标记清除、引用计数。
- 标记清除
垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的标记。而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后。垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收他们所占用的内存空间。
- 引用计数
另一种不太常见的垃圾回收策略是引用计数。引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。当这个引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其所占的内存空间给收回来。这样,垃圾收集器下次再运行时,它就会释放那些引用次数为0的值所占的内存。
如何减少JavaScript中的垃圾回收
- 减少new的关键字(new关键字就意味着一次内存分配),尽量多重用这些创建好的对象
- 当需要一个新的对象时,可以先看看有哪些对象是不用的,然后该对象的属性,把引用让出来
- 清空一个数组对象用
arr.length = 0
代替arr = []