垃圾回收
垃圾回收机制
JS垃圾回收的机制:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是时时的,是按照固定的时间间隔周期性的执行。
垃圾回收方法
标记清除判断标准是看这个对象是否可抵达,主要分为两个阶段:标记阶段、清除阶段
整个标记清除算法过程:
- 垃圾收集器在运行时会给内存中的所有变量都加上一个标记,假设内存中所有对象都是垃圾,全标记为0
- 然后从各个根对象开始遍历,把不是垃圾的节点改成1
- 清理所有标记为0的垃圾,销毁并回收它们所占用的内存空间
- 最后,把所有内存中对象标记修改为0,等待下一轮垃圾回收
引用计数它把对象是否不再需要简化定义为对象有没有其它对象引用到它,如果没有引用,对象将被垃圾回收机制回收。
内存泄漏
原因
由于代码写法不当,会让变量一直处于“进入环境”的状态,无法被回收,出现内存泄漏。
常见几种情况
-
意外的全局变量 解决方法:使用严格模式。“use strict”
-
闭包 闭包可以维持函数内局部变量,使其得不到释放。
解决方法:将事件处理函数定义在外部,解除闭包。或者在定义事件处理函数的外部函数中,删除对dom的引用。