美文网首页
js垃圾回收机制

js垃圾回收机制

作者: 木中木 | 来源:发表于2019-10-16 08:54 被阅读0次

    我们都知道,JS是自动进行垃圾回收,回收算法有两种:标记清除和引用计数

    • 标记清除
      程序在运行的时候,垃圾回收机制会被所有在内存里面的变量都打上标记,然后会去掉运行环境中用到的和被引用的变量。下一次垃圾回收运行的时候,就会把带有标记的变量内存进行释放。
    • 引用计数
      程序运行的时候,运行环境中用到和被引用的变量会被计数,每被应用一次就+1,下一次垃圾回收运行的时候把引用计数为0的变量释放。

    那以上就是两种主要的垃圾回收算法,下面再说说平常比较容易出现内存泄露的地方

    1. 清空对应的dom的四号, 绑定事件未解绑,通过addEventListener为解绑
    2. 函数闭包变量为手动释放
    3. 集成框架中如react,在初始化的时候添加事件,在destroy的时候没有解绑事件
    4. setTimeout/setInterval,定时器用完没有clear掉
    5. 全局对象,特别是未定义的全局变量
    6. 死循环
    7. 循环引用,比如A对象中引用B对象,B对象引用A对象。
    const A = {};
    const B = {A};
    const A.B = B;
    

    性能问题
    垃圾收集器是周期性运行的,而且如果为变量分配的内存数量很可观,那么回收工作量也是相当大的.在这种情况下,确定垃圾收集的时间间隔是一个非常重要的问题.

    IE7发布的时候,其 JavaScript 引擎的垃圾收集例程改变了工作方式:触发垃圾收集的变量分配,字面量和(或)数组元素的临界值被调整为动态修正.IE7 中的各项临界值在初始时与 IE6 相等.如果垃圾收集例程回收的内存分配量低于 15%,则变量,字面量和(或)数组元素的临界值就会加倍.如果例程回收了 85%的内存分配量,则将各种临界值重置回默认值.

    相关文章

      网友评论

          本文标题:js垃圾回收机制

          本文链接:https://www.haomeiwen.com/subject/uzcymctx.html