JS 内存泄漏

2020-04-21  本文已影响0人  行走的蛋白质

什么是内存泄漏?

JavaScript中的内存管理

JavaScript具有自动垃圾回收机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。JS的垃圾收集机制的原理是:找出那些不再继续使用的变量,然后释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预订的收集时间),周期性地执行这一操作。

标记清除算法

JS中常用的的垃圾收集方式是标记清除(Mark-and-sweep)。当变量进入环境时,就将这个变量标记为“进入环境”。从逻辑上讲,永远不能释放在环境中的变量所占用的内存。因为只要进入到环境,就会有可能用到它。当变量离开环境时,会将其标记为“离开环境”,在垃圾收集器工作时(一般垃圾收集器在内存不够时工作),会将标记为“离开环境”的变量所占用的内存收回。

引用计数法

引用计数法是垃圾回收的早期策略,在堆中的每个对象都有一个引用来计数,每当有一个地方引用到它时,计数器的值就会加一;引用失效时,计数器值减一,当计数器的值为0时,就认为该对象就是不被使用的,可以进行垃圾回收,但这种算法缺钱,就是很难解决对象之间相互循环引用的问题;

造成内存泄漏的可能

闭包造成内存泄漏的情况

函数内部的函数引用了外层函数的变量并且使用了它的执行环境,这种情况下外层函数被使用的变量和执行环境不会被垃圾回收机制回收

全局变量
被遗忘的计时器或监听回调
超出DOM引用
上一篇下一篇

猜你喜欢

热点阅读