web前端:js垃圾回收及内存泄漏

    作者:angle-xiu更新于: 2020-03-05 11:38:06

    Web开发

      Javascript也可以用于其他场合,如服务器端编程。完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。

      js垃圾回收

      js能够自动回收申请却未使用的内存,由于每次清除需要的性能较大,不是时时在刷新,而是每隔一段时间才进行一次。

      回收的两种方式

      标记清除(常用)在内存中先标记变量,然后清除那些那些进入环境或者引用的变量的标记,当进入环境退出环境,将被重新标记并被清除,释放出内存。

      引用计数计算变量被引用的次数,引用次数为0将被清除释放内存。缺点:

      无法清除那些引用次数不为0,但又不需要的内存

      letarr=[1,2,3];

      console.log('ok');

      //数组[1,2,3]引用次数为1,但是又没用到就会一直占着内存

      //解决方式:arr.length=0

      无法解决循环引用的问题

      functionfn(){

      letobj1={};

      letobj2={};

      obj1.a=obj2;

      obj2.b=obj1;

      }

      //解决方法:手动释放obj1=nullobj2=null

      内存泄漏

      某些情况无法释放内存,变量一直处于环境中

      出现内存泄漏的一些情况

      最常见的就是闭包了

      闭包会创建一个不会被销毁的栈内存。

      不经意的全局变量

      functionfn(){

      obj={};//没用声明关键字,相当于创建了一个全局变量

      }

      计时器没有被清除

      setInterval()

      setTimeout()

      //解决方法

      清除对应定时器的id

      JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

课课家教育

未登录