浏览器内存泄漏简单知识点

什么是内存泄漏
不再用到的内存,没有及时释放,就叫做内存泄漏。

在 js中,详细一点说就是指我们已经无法再通过js代码来引用到某个对象,但垃圾回收器却认为这个对象还在被引用,因此在回收的时候不会释放它。导致了分配的这块内存永远也无法被释放出来。如果这样的情况越来越多,会导致页面卡顿或系统崩溃。

垃圾回收机制
js 引擎为了解决内存泄漏问题,才有了垃圾回收机制,能够让 js 自动的管理内存,将内存中不在使用的变量回收掉,然后释放出内存空间。

两种回收机制,一个是标记清除法,另一种是引用计数法,其实他两的实现原理我们只明白一点就是都是通过判断当前的变量是否被引用,如果没有被引用,就说明该变量应该被回收,怎么回收就是上边说得两种策略的事情了。

什么是引用?
所谓的引用就是存储在堆内存中的对象你是直接不能访问的,而是通过栈内存中存储该对象的地址进行访问的,该地址就保持着对该对象的引用。

就好比一个盒子,盒子里有一块糖,糖和盒子外部有一根绳子连接着,如果你想直接打开盒子取出糖,不好意思,盒子被上锁了,如果你通过绳子将糖从盒子的小孔中取出来是可以的,就相当于我们所说的引用,糖就是所谓的对象,盒子相当于堆内存。

闭包真的会产生内存泄漏?

闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量

function outer() {
     var  a = '变量1'
     var  inner = function () {
            console.info(a)
     }
    return inner    // inner 就是一个闭包函数,因为他能够访问到outer函数的作用域
}

许多博客都将原因归结为闭包产生了内存泄漏。其实内存泄漏并不是闭包造成的,而是由于闭包内的函数对变量的引用,闭包不是真正产生内存泄漏的原因!实际遇到的闭包产生内存泄漏问题的根本原因是没有及时的断开对变量的引用,而不是注册监听事件的闭包产生的内存泄漏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章