• JavaScript中的回收机制


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

    概述

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

    什么是内存泄漏

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

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

    哪些内容是“垃圾”?

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

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

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

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

    标记清除的优点和缺点:

    优点:

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

    缺点:

    • 首先是内存碎片化。这是因为清理掉垃圾之后,未被清除的对象内存位置是不变的,而被清除掉的内存穿插在未被清除的对象中,导致了内存碎片化
    • 第二个缺点是内存分配速度慢。由于空闲内存不是一整块,假设新对象需要的内存是size,那么需要对空闲内存进行一次单向遍历,找出大于等于size的内存才能为其分配。
  • 相关阅读:
    1480. 一维数组的动态和
    基于JAVA医院患者管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
    OpenCV(三十三):计算轮廓面积与轮廓长度
    Android安全与隐私相关特性的行为变更分析
    linux地址空间
    报价又快又准,ERP系统助力元器件贸易企业快速开单
    对抗博弈决策方法
    云原生 | Kubernetes - 国内镜像部署Helm
    C# 第五章『面向对象』◆第4节:析构函数destructor
    Android 10.0 SystemUI状态栏显示和隐藏自定义图标
  • 原文地址:https://blog.csdn.net/weixin_63228975/article/details/127717962