JavaScript和Java一样具有自动垃圾收集机制。JavaScript的垃圾收集你机制的原理很简单:找出那些不再继续使用的变量,然后释放其占用的内存。

标记清除:这是最常用的垃圾收集方式。原理是:垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记—>然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记—>在此之后再被加上标记的变量将被视为准备删除的变量—>最后,垃圾收集器完成内存清除工作,销毁那些带标记的变量并回收它们所占用的内存空间。

引用计数:这是一种不太常见的垃圾收集方式,IE用的就是这种。引用计数是指追踪记录每个值被引用的次数,原理是:当声明一个变量并将一个引用类型值赋给该变量时,则这个值得引用次数初始化为1—>如果同一个值又被赋值给另一个变量,则该值的引用次数加1—>相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值得引用次数减1—>当这个值得引用次数变为0时,说明无需再访问这个变量,可以被垃圾回收机制回收。

但引用计数存在循环引用的风险,循环引用指的是对象A包含一个指向对象B的指针,而对象B中也包含一个指向对象A的引用。比如:

这里例子中,objectA和objectB通过各自的属性相互引用,也就是说,两个对象的引用次数都是2,尽管函数执行完毕后,objectA和objectB还将继续存在,因为它们的引用次数永远都不为0。

IE因为采用了引用计数的垃圾收集而性能低下。

当然,我们也可以通过解除变量的引用(解除引用)来消除循环引用现象,比如:objectA = null;和objectB = null。

死磕java_死磕JavaScript-垃圾收集机制相关推荐

  1. 一起来探讨Javascript垃圾收集机制

    JS垃圾收集机制 JS会在创建变量时自动分配内存,在不使用的时候会自动周期性的释放内存,释放的过程就叫 "垃圾回收".这个机制有好的一面,当然也也有不好的一面.一方面自动分配内存减 ...

  2. 死磕java_死磕 java同步系列之AQS终篇(面试)

    问题 (1)AQS的定位? (2)AQS的重要组成部分? (3)AQS运用的设计模式? (4)AQS的总体流程? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为 ...

  3. 死磕java_死磕 java同步系列之AQS起篇

    问题 (1)AQS是什么? (2)AQS的定位? (3)AQS的实现原理? (4)基于AQS实现自己的锁? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Jav ...

  4. 死磕java_死磕Java——集合

    死磕Java--多线程下的集合 1.1.ArrayList 都知道ArrayList是线程不安全的,如果在多线程下使用了ArrayList会产生什么样的情况,简单看一段代码. public stati ...

  5. javascript V8引擎垃圾收集机制

    V8引擎使用的垃圾收集机制是标记清除,那么javascript在垃圾收集会阻塞其他程序执行.V8引擎使用了增量标记的方式进行优化 增量标记 V8不是直接对整个栈堆遍历标记,而是标记一部分堆后回复正常执 ...

  6. Java垃圾收集机制

    本文是<深入理解Java虚拟机>一书中第三章的读书总结. 前面介绍了Java内存结构和HotSpot虚拟机在堆内存中管理对象的过程.不过,在Java程序中对象的创建是非常频繁的,而内存的大 ...

  7. JavaScript 内存机制(前端同学进阶必备)

    JavaScript 内存机制(前端同学进阶必备) 简介 每种编程语言都有它的内存管理机制,比如简单的C有低级的内存管理基元,像malloc(),free().同样我们在学习JavaScript的时候 ...

  8. 傻傻分不清的javascript运行机制

    学习到javascript的运行机制时,有几个概念经常出现在各种文章中且容易混淆.Execution Context(执行环境或执行上下文),Context Stack (执行栈),Variable ...

  9. 【探讨】javascript事件机制底层实现原理

    前言 又到了扯淡时间了,我最近在思考javascript事件机制底层的实现,但是暂时没有勇气去看chrome源码,所以今天我来猜测一把 我们今天来猜一猜,探讨探讨,javascript底层事件机制是如 ...

最新文章

  1. 一秒看遍10万神经元的「绚丽烟花」,AI究竟向大脑学什么?|北大陈良怡专访...
  2. 关闭子窗口刷新父窗口
  3. 中国制鞋机械行业市场“十四五”规划模式及项目投资分析报告2022-2028年版
  4. c++基本类型c++string与c风格字符串的相互转化
  5. React Native ScrollableTabView的自定义tabBar
  6. 现代制造工程笔记01:课程安排
  7. [There will be more story......]
  8. JAVA基础知识+基础代码
  9. python内置函数返回序列中最大元素_Python之路(第八篇)Python内置函数、zip()、max()、min()...
  10. 用vscode可以开发php,【编程开发工具】vscode能够编写php吗
  11. MSFT_NetAdapter修改网卡名
  12. 恒强制版系统980_恒功率、大功率及无线充电,充电设备面临哪些趋势和挑战?...
  13. 黑莓BlackBerry手机刷机ROM常见问题
  14. java rxtx下载_rxtx-2.1-7r2 jav
  15. Android连点器(adb)
  16. 购买腾讯云学生服务器完整过程
  17. scala 如何读取 csv 文件
  18. Guitar Pro 功能介绍之RSE引擎
  19. 转鹤冲天兄反射性能比较
  20. Oracle 11g用exp无法导出空表的处理方法

热门文章

  1. 在SAP ABAP和Hybris Commerce里启动后台作业
  2. 微信平台的几种分享方式调研
  3. 使用pscp从windows电脑拷贝数据到linux遇到的ssh_init错误
  4. 我的同事Leo做的一个AR增强现实的项目
  5. 如何使用Chrome开发者工具找到Marketing Cloud某个contact的guid
  6. SAP OData的CSRF校验开关
  7. how to find all element type with type table of content
  8. WebClient UI framework - how tree proxy structure node is rendered
  9. 打印product所有attachment 具体信息的小工具
  10. Object category automatic search