垃圾回收机制

436 阅读2分钟

在了解垃圾回收机制之前,先来了解两个浏览器底层的概念:

栈内存:

【EC(G)】全局执行上下文:在浏览器加载页面的时候形成,然后会在页面关闭的时候释放(页面刷新:先释放,重新加载后再形成)
【EC(xxx)】私有上下文:函数执行会形成一个私有的上下文(let/const也会产生私有的上下文)
* + 一般情况下代码执行完就会被出栈释放
* + 如果当前上下文中的某个内容(一般是一个堆[对象/函数])被上下文以外的事物占用了,则当前上下文不能被释放

堆内存:

当我们在全局上下文中创建一个引用类型时,例如let obj={}或者let 发那= function(){},浏览器会给我们开辟一个Heap堆内存用来存储这些引用类型。

谷歌浏览器的垃圾回收机制:

谷歌浏览器按照“是否被引用”来决定堆内存的释放还是不释放的:浏览器会定期间隔一段时间,查找所有堆内存是否被占用,被占用的不处理,但是如果没有被占用,则直接把它释放掉
* + 我们可以基于手动赋值为null的方式结束堆内存的占用,来达到释放内存的目的

IE浏览器的回收机制:

 IE浏览器是根据“引用计数”方式实现垃圾回收的:每次被占用都会计数累加,相反取消引用,则计数累减,直到计数为零,则释放内存
* + 这种方式经常会出现记着记着就乱了 “内存泄漏”
* + 扩展任务:javascript高级程序设计第三版,最后章节中有内存泄漏的问题,自己可以看看