• Javascript的垃圾回收机制


      在js中,所需内存的分配以及无用内存的回收完全实现了自动管理。垃圾收集机制原理:找出那些不再使用的变量,然后释放其占用的内存,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间)周期性的执行这一操作垃圾收集的方式有两种:标记清除法和引用计数法。

      标记清除法:给存储在内存中的所有变量添加标记,去除掉环境中的变量以及被环境中的变量引用的变量的标记,剩下的带标记的就是准备删除的变量,这是一种比较常用的方法,大多数浏览器中采用的都是这种方法。

      引用计数法:声明一个变量,将一个引用类型的值赋值给该变量,则该变量的引用次数就为1,如果该变量又赋值给另一个变量,则该变量引用次数加1,如果包含该变量的引用的变量获取了新的值,则该变量的引用次数减1;如果引用次数为0,则被认为是垃圾进行回收。该方法不太常见,IE9以下的DOM和BOM采用的就是这种垃圾收集方法,该方法在遇到循环引用时会产生内存泄漏,导致已销毁变量的内存空间无法被回收,例如:

    1 function test(){
    2         var a=new Object; //a的引用次数为1
    3         var b=new Object;  //b的引用次数为1
    4         a.r=b;        //b的引用次数为2
    5         b.r=a;        //a的引用次数为2
    6 }

    a与b互相引用,最后两个变量的引用次数都为2,所以当函数执行完后,虽然连个变量都被销毁,但由于它们的引用次数为2,释放的内存无法被回收。所以在IE9以下操做DOM和BOM时就需要注意这个问题,而操做其他对象时IE也是采用的标记清除,不用担心循环引用的问题,IE9以上已经将DOM和BOM对象完全转化为js对象,也不用担心这个问题。

      当有不再使用的全局变量和全局对象时,最好通过解除引用将其手动设置为null等待回收机制回收。

      

  • 相关阅读:
    课后作业-阅读任务-阅读提问-2
    课后作业-阅读任务-阅读提问-3
    结对-贪吃蛇-需求分析
    《团队-团队编程项目作业名称-最终程序》
    《20171130-构建之法:现代软件工程-阅读笔记》
    课后作业-阅读任务-阅读提问-4
    团队-井字棋游戏-项目总结
    《软件工程课程总结》
    团队编程项目作业5-小组评分
    课后作业-结对编程项目总结
  • 原文地址:https://www.cnblogs.com/cjw-ryh/p/7132511.html
Copyright © 2020-2023  润新知