JS为什么需要垃圾回收机制

程序的运行需要内存,只要程序提出要求,操作系统或者运行是就必须供给内存。对于持续运行的服务进程,必须及时释放内存,否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。

JS垃圾回收常用的两种方式

环境的定义:《JavaScript高级程序设计第三版》定义执行环境(为简单起见,有时也称环境)是JavaScript中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们的各自行为。全局执行环境是最外围的一个执行环境,在Web浏览器中,全局执行环境被认为是window对象。全局执行环境被销毁时(例如关闭网页或者关闭浏览器),保存在内部的变量和函数也随之被销毁。每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行后,栈将环境弹出,把控制权返回给之前的执行环境。

  1. 标记清除
    js中最常用的方式就是标记清除(mark-and-sweep)。当变量进入一个环境(例如在函数内声明一个变量)时,就将这个变量标记为 “进入环境”。因为从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入环境的时候进入相应的环境的时候,就有可能会用到这些变量。而当变量离开环境时,则将其标记为"离开环境"。
    垃圾收集器会在运行的时候给存储在内存中所以的变量都加上标记,然后它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后再被加上标记的变量将被视为准备删除的变量,原因是环境的变量已经无法访问到这些变量了。最后,垃圾收集器完成内存清除工作,销毁哪些带标记的值并回收他们所占用的内存空间

  2. 引用计数
    引用计数策略并不常用。引用计数的含义是跟踪记录每个指被引用的次数。当声明了一个变量并将一个引用类型的值赋给该变量时,则这个值的引用次数就是 1。如果同一个值又被赋给了另一个变量,则该值的引用次数加 1。相反,如果包含这个值的变量又引用了另外一个值,则这个值的引用次数就减 1。当这个值的引用次数变成 0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来了。这样当垃圾收集器下次再运行时,它就会释放那些引用次数为 0 的值所占用的内存。

JS的垃圾回收机制是什么相关推荐

  1. 面试题——js垃圾回收机制和引起内存泄漏的操作

    JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理:是当变量进入环境时,将这个变量标记为"进 ...

  2. js垃圾回收机制详解

    简介 一.前言 二.什么是内存泄漏 1. 引用计数 2. 标记清除 三.总结 一.前言 大家好,我是思航.最近我们游戏在进行内存优化,所以大家网上找了很多教程,来定位和查找内存泄漏问题.今天呢,我打算 ...

  3. JS 垃圾回收机制解析

    概述 JS是一门具有自动垃圾回收机制的语言,开发人员不必关心内存分配和回收问题. JS的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,垃圾回收机制就是间歇的 ...

  4. JS 垃圾回收机制以及垃圾回收策略

    垃圾回收机制 什么是垃圾回收机制: 解释:执行环境负责管理代码执行过程中使用的内存.JS的垃圾回收机制是为了以防内存泄漏,简单来说就是:间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存. ...

  5. JS垃圾回收机制是怎样的?

    1.概述 js的垃圾回收机制是为了防止内存泄漏(已经不需要的某一块内存还一直存在着),垃圾回收机制就是不停歇的寻找这些不再使用的变量,并且释放掉它所指向的内存. 在JS中,JS的执行环境会负责管理代码 ...

  6. 详解JavaScript垃圾回收机制

    垃圾回收机制 JS的垃圾回收机制是为了以防内存泄漏,内存泄漏的含义就是当已经不需要某块内存时这块内存还存在着,垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,并释放掉它们所指向的内存. var a ...

  7. js垃圾回收机制和引起内存泄漏的操作

    Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理:是当变量进入环境时,将这个变量标记为"进入环境".当变量离 ...

  8. JS高级-自执行函数-垃圾回收机制及内存管理

    自执行函数 函数分为两种: (1)一般函数 预解析后通过函数调用 函数名( ) 执行 (2)自执行函数 js引擎一遇到整个函数就立马执行 代码如下: js中的垃圾回收机制及内存管理 内存管理 (1)全 ...

  9. JS闭包的简单理解。优缺点以及垃圾回收机制

    闭包是什么? ·了解闭包首先了解js的'链式作用域'结构,对象可以一级一级的向上查找父对象的变量,所以父对象的变量对子对象可见,反之不成立:所以都可以访问全局变量 ·为了解决函数外部无法访问函数内局部 ...

最新文章

  1. 狂风暴雨——电闪雷鸣篇:数据流层核心思想揭秘
  2. SpringMVC上传文件以流方式判断类型附常用类型
  3. 神策 2020 数据驱动用户大会:新愿景 + 新定位 + 新舰队正式亮相!
  4. springmvc提供RestController方法接口返回json数据中文乱码
  5. python编程-迭代器(类,方法,继承),函数,数据结构,
  6. oracle堆,oracle被一堆insert和update堵死解决方案
  7. c语言1A,C程序设计语言1a.ppt
  8. 设计模式--请参阅本质
  9. django 获取环境变量_django 环境变量配置过程详解
  10. 优先队列/oriority queue 之最大优先队列的实现
  11. javascript 闭包和原型
  12. [转]C++异常处理 4
  13. 算法:链表实现插入排序Insertion Sort List
  14. python将列表元素全部小写_python实现创建新列表和新字典,并使元素及键值对全部变成小写...
  15. 微信公众号一次性订阅消息功能开发实践
  16. 英语诗歌选读 | 期末总结
  17. pythonai人脸识别_AI的强大!用Python实现一个简单的人脸识别
  18. VC++计算正反坐标方向角
  19. 微软向开发者免费提供的Windows 10虚拟机镜像
  20. 《魔兽争霸》故事背景

热门文章

  1. 食品类小程序有哪些?这3款小程序推荐给你
  2. Navicat 全部产品破解方法(MySQL/PostgreSQL等所有navicat的产品均可破解)
  3. 面试题:找出数列中间未排序好的子数列
  4. ipad html阅读器,iPad 超强文档阅读应用(GoodReader)
  5. kepler克卜勒_克卜勒(Kepler)
  6. 阿里王坚受邀成为 TGO 鲲鹏会荣誉导师
  7. cocos2dx使用TiledMap模拟3D地图场景----斜45度2D地图的靠墙直线移动
  8. 如何在Excel中的每个打印页面上重复特定的行或列
  9. 阿里云天池AI龙珠计划-Python训练营学习笔记task1
  10. 移动电源大家都买多大的?大容量移动电源推荐