欢迎光临
我们一直在努力

前端增量回收的工作原理,这和垃圾清除机制有啥关系

前端里的增量回收本质就是垃圾回收的一种执行方式,他不是新的机制,而是让垃圾清除分多次、慢慢做,避免卡死页面

一、概念拆解

垃圾回收:回收不在使用的内存

垃圾清除算法:标记清除、引用计数

增量回收:一次做完or分批做

前端增量回收:浏览器js引擎里的GC优化手段

增量回收 = 垃圾清除的执行策略

二、如果没有增量回收

传统GC

JS 执行

触发 GC

暂停所有 JS(页面冻结)

标记 + 清除

继续执行

问题:

  • js是单线程
  • GC一跑,js暂停、页面不响应、动画卡顿、滚动掉帧
  • 在threejs中如果没有增量GC,页面早卡死了

    三、增量回收的思想

    把一次完整的垃圾回收,拆成很多个小步骤,插在js执行的空隙中

    类比:

    一次性打扫房间:打扫期间只能打扫

    碎片化时间打扫:每五分钟打扫一点,中途可随时停下,对生活影响极小

    四、增量回收在 JS 引擎里是怎么做的?

    1. 内存怎么分

    新生代(Young Generation)
    – 小对象
    – 生命周期短
    – 回收快(Minor GC)

    老生代(Old Generation)
    – 大对象
    – 生命周期长
    – 回收慢(Major GC)

    👉 增量回收主要针对:老生代 GC

    2. 标记清除 + 增量执行

    传统标记清除

    一次性:
    标记所有可达对象
    清除不可达对象

    增量标记(Incremental Marking)

    JS 执行一会儿

    标记一点对象

    JS 再执行

    再标记一点

    JS 和 GC 交替执行

    3. JS 执行时对象不是在变吗

    解决方案:写屏障(Write Barrier)

    当 JS 代码:

    obj.a = newObj

    引擎会:

    • 记录“对象引用发生了变化”

    • 确保 GC 不会漏标对象

    👉 这也是为什么你感觉不到 GC 在跑

    赞(0)
    未经允许不得转载:171主机测评 » 前端增量回收的工作原理,这和垃圾清除机制有啥关系
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址