js垃圾回收机制

embedded/2024/10/21 9:40:34/

标记清除(Mark-and-Sweep)算法

  1. 标记阶段(Marking Phase):

    • 垃圾回收器首先遍历所有的根对象,这些根对象一般是全局对象、局部变量和函数调用链。

    • 对所有能直接或间接从根对象访问到的对象进行标记,表示这些对象还在使用中。

  2. 清除阶段(Sweeping Phase):

    • 在标记阶段结束后,垃圾回收器遍历内存中所有的对象,对于没有被标记的对象,认为它们是不再使用的对象。

    • 清除这些未被标记的对象,释放其占用的内存空间。

垃圾回收机制中的关键概念

  1. 根对象(Root Objects):

    • 根对象是程序执行中直接访问到的对象,如全局变量、局部变量、当前调用栈中的变量等。

  2. 可达性(Reachability):

    • 如果一个对象可以通过引用链从根对象到达,则认为该对象是可达的。

    • 垃圾回收器通过遍历这些引用链来判断对象是否可达。

  3. 弱引用(Weak References):

    • 弱引用不会阻止对象被垃圾回收。WeakMap 和 WeakSet 提供了对对象的弱引用。

引用计数(Reference Counting)

虽然现代 JavaScript 引擎主要使用标记清除算法,但早期的一些垃圾回收器使用的是引用计数算法。这种算法简单但有一个主要缺点,即循环引用问题。

  • 引用计数

    • 每个对象维护一个引用计数,当一个新的引用指向该对象时,计数加1,当引用被删除时,计数减1。

    • 当引用计数变为0时,对象被认为是不可达的,可以被回收。

优化策略

现代 JavaScript 引擎不仅使用基本的标记清除算法,还引入了许多优化策略,如:

  1. 分代回收(Generational Collection):

    • 把对象分为新生代和老生代。新生代对象生命周期较短,老生代对象生命周期较长。不同代的对象采用不同的回收策略,提高回收效率。

  2. 增量标记(Incremental Marking):

    • 将标记过程分为多个小步骤,避免一次性暂停应用执行进行标记,减少回收过程对应用性能的影响。

  3. 并发回收(Concurrent Collection):

    • 在应用执行的同时进行垃圾回收,进一步减少回收过程对应用的暂停时间。


http://www.ppmy.cn/embedded/46746.html

相关文章

系统与软件工程软件测试过程

系统与软件工程 软件测试 测试过程 ;对应的国标是GB/T 38634.4 2020 ,该标准的范围规定适应用于治理、管理和实施任何组织,项目或较小规模测试活动的软件测试的测试过程,定义了软件测试通用过程,给出了描述过程的支持信息图表。 一 术语和定义 1.1实测…

【聚星文社】用Midjourney批量制作小说推文视频,最强MJ推文工具!

【聚星文社】是一家专业的文学推广机构,我们拥有一支经验丰富的推广团队和先进的推广技术。我们可以为您提供批量制作小说推文的服务。 我们将使用Midjourney这一专业的推广平台来制作小说推文。Midjourney是一款功能强大的推广工具,它可以根据您提供的小…

GPT-4o是否具备记忆能力?DeepMind和开源社区解开LLM记忆的谜团 !

LLM有记忆能力吗?有,也没有。 尽管在与ChatGPT对话时,感觉它似乎能记住你之前的发言,但实际上,这些模型在进行推理时并没有真正的记忆能力。GPT-4o深夜发布!Plus免费可用!https://www.zhihu.com…

SQL小白10分钟快速入门

SQL(Structured Query Language)是一种用于管理关系型数据库的标准化编程语言。以下是SQL的入门基础教程,涵盖了一些基本概念和常用操作。 1. 数据库和表 数据库(Database):一个存储数据的容器。表&#…

【Linux多线程】线程的终止、等待和分离

文章目录 线程终止正常退出return 退出pthread_exit函数终止线程 pthread_cancel强制终止线程进程终止 线程等待为什么需要等待线程?pthread_join函数 分离线程pthread_detach函数 线程终止 下面给出终止线程的三种方式: 正常退出: 线程执行…

HTML跳动的爱心

目录 写在前面 HTML简介 程序设计 修改文字 推荐系列 写在后面 写在前面 本期小编给大家分享可以写字的html动态爱心代码,一起来看看叭~ HTML简介 HTML(HyperText Markup Language)是一种用于创建网页的标记语言。它是互联网的基础&…

如何通过 6 种简单方法将照片从华为转移到 PC?

华为作为全球领先的智能手机供应商之一,最近推出了其自主研发的操作系统——HarmonyOS 2.0,旨在为智能手机、平板电脑和智能手表等设备提供更流畅的用户体验。随着Mate 40/P40等系列手机计划升级到HarmonyOS 2.0,用户可能需要将手机中的文件备…

芋道系统,springboot+vue3+mysql实现地址的存储与显示

1.效果图 2.前端实现&#xff1a; <el-form-item label"地址" prop"entrepriseAddress"><el-cascaderv-model"formData.entrepriseAddress"size"large":options"region"/></el-form-item> //导入组件 im…