码迷,mamicode.com
首页 > 其他好文 > 详细

内存泄漏

时间:2019-08-23 16:19:58      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:新生代   无法   窗口   事件   两种   listen   amp   关闭窗口   情况下   

Q: 什么是内存泄露?

A:已经不再使用的内存未能被程序释放,叫内存泄露(memory leak)。

Q: 什么情况下出现内存泄漏?

首先了解一下【垃圾回收】:垃圾回收(英语:Garbage Collection,缩写为GC)在计算器科学中是一种自动的存储器管理机制。当一个计算机上的动态存储器不再需要时,就应该予以释放,以让出存储器,这种存储器资源管理,称为垃圾回收。

A: 当一块内存不再用到,但是垃圾回收机制又无法释放这块内存的时候,就导致内存泄漏。

===========================================================================

出现内存泄露的的几种常见情况:

一、全局变量

由全局变量在程序终止前不会被垃圾回收,而JavaScript对未声明变量的处理方式是在全局对象上创建该变量的引用。浏览器中,全局即window对象,在关闭窗口或刷新前不会释放。

  全局变量的情况:

  1、未声明变量: a = 1

  2、直接调用内含this的构建函数,this会指向window,而this扩展的属性与方法,会绑定到window上

二、闭包也会造成内存泄漏 (先了解下【闭包】:一个函数与它的作用域链构成闭包。)

闭包内的函数内部调用了作用域链中的变量,会新分配内存来存储这些变量,特别是柯里化最容易造成这种问题。

三、setinterval

四、事件监听(EventListener):GC不会对事件监听主动回收,换句话说需要开发者主动处理移除

 

===============

PS: js回收机制分为两种:“标记清除”&“引用计数”,主流新生代浏览器都是“标记清除”法,只有老款IE(ie8及以下)用的是“引用计数”法,因为“引用计数法”在变量循环调用时会造成内存泄漏,基本被后续浏览器抛弃。

 

内存泄漏

标签:新生代   无法   窗口   事件   两种   listen   amp   关闭窗口   情况下   

原文地址:https://www.cnblogs.com/liujinyu/p/11400651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!