JavaScript垃圾回收机制

这篇具有很好参考价值的文章主要介绍了JavaScript垃圾回收机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是JavaScript垃圾回收机制

  • 在JavaScript中,垃圾回收(Garbage Collection)是一种自动内存管理机制,它可以自动地识别不再使用的变量和对象并将它们从内存中清除,以释放内存空间。

  • JavaScript中的垃圾回收器会定期扫描内存中的对象,标记那些可达对象和不可达对象。

    1. 可达对象指的是当前代码中正在被使用的对象
    2. 不可达对象指的是已经不再被引用的对象。
  • 垃圾回收器会将不可达对象标记为垃圾对象,并将它们从内存中清除。

  • JavaScript中的垃圾回收机制主要有两种:

    1. 标记清除(Mark-and-Sweep)和引用计数(Reference Counting)。
    2. 标记清除是JavaScript中主流的垃圾回收算法,而引用计数则已经很少被使用。

二、标记清除

  • 标记清除(Mark-and-Sweep)的工作原理是:垃圾回收器会定期扫描内存中的对象,从根对象开始遍历内存中的所有对象,对于可达对象,通过标记它们来标识它们是可达对象;对于未被标记的对象,就说明它们是不可达对象,需要被清除。该算法的优点是可以处理循环引用的情况,但在执行时间上可能会比较长,影响程序的性能。

例如,有一个对象A,其中包含一个指向对象B的引用,而对象B也包含一个指向对象A的引用。此时,如果我们不手动清除这两个对象,垃圾回收器就会通过标记清除算法自动识别这两个对象并清除它们。

  • 实现标记清除(Mark-and-Sweep)算法的主要步骤如下:

    1. 创建一个根对象,例如window对象;
    2. 遍历根对象及其所有引用的对象,并标记它们是可达对象;
    3. 遍历内存中所有对象,如果发现某个对象未被标记,就将其清除。
    4. 在JavaScript中,标记清除算法是由浏览器自动完成的,开发者无需手动实现。

三、引用计数

  • 引用计数(Reference Counting)的工作原理是:垃圾回收器会记录每个对象被引用的次数,当对象被引用的次数为0时,就将该对象清除。该算法的优点是实现较为简单,但无法处理循环引用的情况,可能会导致内存泄漏。

例如,有一个对象A,其中包含一个指向对象B的引用,而对象B也包含一个指向对象A的引用。此时,由于对象A和B互相引用的次数不为0,垃圾回收器就无法清除这两个对象,导致内存泄漏。

  • 实现引用计数(Reference Counting)算法的主要步骤如下:
    1. 给每个对象添加一个引用计数器,初始值为0;
    2. 当对象被引用时,引用计数器加1;
    3. 当对象不再被引用时,引用计数器减1;
    4. 当引用计数器为0时,就将该对象清除。
    5. 在JavaScript中,引用计数算法也是由浏览器自动完成的,开发者无需手动实现。不过需要注意的是,由于引用计数无法处理循环引用的情况,因此现代浏览器一般采用标记清除算法。

四、关于标记清除算法如何处理循环引用的情况

  • 标记清除算法处理循环引用的情况是通过标记和清除两个阶段来完成的。
    • 在标记阶段,垃圾回收器会从根对象开始遍历内存中的所有对象,标记所有可达对象,而对于不可达的对象,则不进行标记。
    • 在清除阶段,垃圾回收器会清除所有未被标记的对象,从而释放它们占用的内存空间。
  • 在处理循环引用的情况时,标记清除算法会通过特殊的标记方式来标记循环引用的对象。
  • 具体来说,在标记阶段,垃圾回收器会将循环引用的对象标记为“可达”,并且在遍历过程中不会重复标记已经被标记过的对象。
  • 在清除阶段,由于循环引用的对象被标记为“可达”,因此不会被清除,从而保证了循环引用的正确处理。

例如,有一个对象A,其中包含一个指向对象B的引用,而对象B也包含一个指向对象A的引用。在标记阶段,垃圾回收器会从根对象开始遍历内存中的所有对象,标记对象A和B为可达对象,并且标记它们是循环引用的对象。在清除阶段,由于对象A和B被标记为可达对象,因此不会被清除,从而保证了循环引用的正确处理。文章来源地址https://www.toymoban.com/news/detail-682870.html


到了这里,关于JavaScript垃圾回收机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JS垃圾回收机制

    什么是性能优化? 提高运行效率,降低运行开销的行为都可以看做性能优化。 js语言本身的优化,实现编写高效率的代码。 什么是内存管理? 内存:由可读写单元组成,表示一片可操作空间 管理:人为的去操作一片空间的申请、使用和释放 内存管理:开发者主动申请空间

    2023年04月09日
    浏览(71)
  • 记录--JS 的垃圾回收机制

    垃圾回收(Garbage Collection)是一种内存管理机制,用于检测和清理不再被程序使用的内存,这些不再被使用的内存就被称为垃圾。垃圾回收器会在 JS 引擎(浏览器或者 nodejs)内部周期性地运行,一般情况下无需开发者手动操作。 但是,了解垃圾回收机制的工作原理有助于我

    2024年02月12日
    浏览(24)
  • 介绍一下js垃圾回收机制

    JavaScript中的垃圾回收机制负责自动管理内存,回收不再使用的对象所占用的内存空间。在JavaScript中,开发者不需要显式地分配和释放内存,垃圾回收器会自动完成这些操作。 以下是关于JavaScript垃圾回收机制的一些关键概念: 内存生命周期 :JavaScript内存生命周期包括分配、

    2023年04月11日
    浏览(34)
  • 关于js的内存管理和垃圾回收机制的理解

    js的内存管理: 内存管理,顾名思义,js在创建变量时,会在内存中分配空间,来储存新增的变量,其中有两种方式, 1:基本类型,系统会在内存中分配实实在在的内存空间,来存放新增的变量,存储的数据结构为栈 2:引用类型,函数,对象等,系统也会在内存中分配空间

    2024年02月11日
    浏览(32)
  • 垃圾回收机制和常用的算法

    垃圾回收主要针对堆和方法区(非堆),程序计数器,虚拟机栈,本地方法栈这三个区域属于线程私有,随着线程的销毁,自然就会雄安会了,因此不需要堆着三个区域进行垃圾回收。 堆中几乎放着所有的对象实例(为什么这么说呢?因为现在有了JIT和标量替换等优化方法)

    2024年02月14日
    浏览(33)
  • JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

    🤖 作者简介: 努力的clz ,一个努力编程的菜鸟 🐣🐤🐥   👀 文章专栏: 《JVM 学习笔记》 ,本专栏会专门记录博主在学习 JVM 中学习的知识点,以及遇到的问题。   🙉 文章详情: 本篇博客是学习 【狂神说Java】JVM快速入门篇 的学习笔记,关于 GC垃圾回收机制 (堆内存结

    2023年04月19日
    浏览(31)
  • 【Java虚拟机】JVM垃圾回收机制和常见回收算法原理

    1.垃圾回收机制 (1)什么是垃圾回收机制(Garbage Collection, 简称GC) 指自动管理动态分配的内存空间的机制,自动回收不再使用的内存,以避免内存泄漏和内存溢出的问题 最早是在1960年代提出的,程序员需要手动管理内存的分配和释放 这往往会导致内存泄漏和内存溢出等问

    2024年02月02日
    浏览(38)
  • 浅谈JVM垃圾回收机制

    新生代收集(Minor GC/Young GC):只对新生代进行垃圾收集 老年代收集(Major GC/Old GC):只队老年代进行垃圾收集 混合收集(Mixed GC):对整个新生代和老年代进行垃圾收集 收集整个Java堆和方法区 空间分配担保是为了确保在Minor GC之前老年代还有容纳新生代所有对象的剩余空间 垃圾回收算

    2024年02月10日
    浏览(35)
  • JVM及垃圾回收机制

    类加载器负责将.class文件加载到JVM中。主要分为三种层次:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。它们按层次关系加载类,保证类的隔离性和重用性。 运行时数据区包括方法区、堆、栈、本地方法栈和程序计数器。堆用于存放对象实例,方法区保存类信息和

    2024年02月12日
    浏览(34)
  • 【JVM】垃圾回收机制

     哈喽,哈喽,大家好~ 我是你们的老朋友: 保护小周ღ    今天给大家带来的是  JVM (Java 虚拟机) 的垃圾回收机制,回收是指回收什么?  如何确定要回收的内存: 引用计数,可达性分析,如何释放空间 : 标记清除,复制算法,标记整理,分代回收 ,一起来看看叭~ 本期

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包