• JavaScript中的回收机制


    在JS中,对于任何变量、对象、数组、实例等等这些,都会消耗我们的内存和资源,为了节省资源和提高速度,在JS中,他是如何处理我们已经不再使用的变量数组等呢?

    概述

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

    什么是内存泄漏

    程序的运行需要内存,程序运行中的各种操作需要消耗资源和内存,程序运行中生成的各种数据也需要内存。若不及时释放内存,则内存的占用越来越高,轻则影响程序和系统的性能,重则导致进程或系统的崩溃。

    没有及时释放不再使用的内存,就称为内存泄漏。
    对于有的语言能够进行自动化内存管理,称为垃圾回收机制(Garbage collection)

    哪些内容是“垃圾”?

    JS的垃圾回收机制会定期(周期性)找出那些不再用到的内存(变量),然后释放其内存。

    有用的值:
    • 本地函数的局部变量和参数
    • 被上下文中的变量引用的变量
    • 全局变量
    无用的值:
    • 值为 null 的值
    • 函数的局部作用域中的变量和参数(函数完成后)
    JS垃圾回收方式
    标记清除

    标记清除分为:标记阶段清除阶段

    首先它会遍历堆内存上所有的对象,分别给它们打上标记,然后在代码执行过程结束之后,对所使用过的变量取消标记。在清除阶段再把具有标记的内存对象进行整体清除,从而释放内存空间。

    标记清除的优点和缺点:

    优点:

    • 实现简单无非是标记和不标记的差异。

    缺点:

    • 首先是内存碎片化。这是因为清理掉垃圾之后,未被清除的对象内存位置是不变的,而被清除掉的内存穿插在未被清除的对象中,导致了内存碎片化
    • 第二个缺点是内存分配速度慢。由于空闲内存不是一整块,假设新对象需要的内存是size,那么需要对空闲内存进行一次单向遍历,找出大于等于size的内存才能为其分配。
  • 相关阅读:
    【算法专题】哈希表
    redis 生成流水工具类
    一文讲透 RocketMQ 消费者是如何负载均衡的
    SpringBoot保姆级教程(八)热部署 & 整合MyBatis
    LeetCode每日一题(2201. Count Artifacts That Can Be Extracted)
    CSP-J 2023 第二轮认证入门级(不含答案)
    win11系统如何访问ie浏览器(不用额外安装IE浏览器,使用win11系统自带功能即可访问ie浏览器)
    U231683 younger 永存
    (react+ts)vite项目中的路径别名的配置
    Spring的执行流程 & Bean的作用域与生命周期
  • 原文地址:https://blog.csdn.net/weixin_63228975/article/details/127717962