You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript内存密集型任务中垃圾回收行为探究及问题咨询

关于JavaScript垃圾回收的内存测试问题

我正在开发一款应用,目前正在研究与*JavaScript垃圾回收(GC)*相关的内存使用模式,为此构建了一个简单的基准测试来更好地理解GC的行为,其中包含Task A和Task B两个独立任务,代码如下:

const button = document.getElementById('begin-test');
button.onclick = () => {
  console.log('start');

  const LOOPS = 40000000;
  let array = [];

  // Task A
  for (let index = 0; index < LOOPS; index++) {
    const value = [{ value: index }];
    array.push(value[0].value);
  }

  // Task B
   for (let index = 0; index < LOOPS; index++) {
     array.push(index);
  }

  array = null;

  console.log('done');
}

测试时我会交替注释其中一个任务来单独执行,无其他JavaScript代码运行。应用初始内存约为3MB:执行Task A后,Chrome内存检测工具显示内存占用为230MB,强制垃圾回收后回到3MB;执行Task B后内存占用达580MB,强制垃圾回收后同样回到约3MB,该结果在新标签页测试中保持一致。

针对上述行为,我有三个技术问题:

  1. Task A中的显式内存分配是否是其“内存消耗”更低的原因?
  2. 为什么设置array = null(使用array = []或array.length = 0也得到相同结果)无法立即触发垃圾回收?
  3. 测试用例的简洁性是否会影响该特定场景下测试结果的准确性?

内容的提问来源于stack exchange,提问作者emanudev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:05:20