为何会出来垃圾回收?
找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是时时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。
如何解决?
标记清除、引用计数
标记清除: 当变量进入执行环境是,就标记这个变量为“进入环境”。当变量离开环境时,则将其标记为“离开环境”。
引用计数: 所谓"引用计数"是指语言引擎有一张"引用表",保存了内存里面所有的资源(通常是各种值)的引用次数。如果一个值的引用次数是0,就表示这个值不再用到了,因此可以将这块内存释放。
哪种情况会导致内存泄露:
意外的全局变量 被遗忘的计时器或回调函数 没有清理DOM元素的 引用
闭包 :闭包可以维持函数内局部变量,使其得不到释放。
避免内存泄露方式:
减少不必要的全局变量, 或者生命周期较长的对象,及时对无用的数据进行垃圾回收
注意程序逻辑 避免造成死循环
避免创建过多的对象
垃圾回收的场景优化:
数组 Array的优化 对象尽量复用 在循环中的函数表达式,能复用最好放在循环外面