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

JavaScript如何准确测量单个函数运行占用的总内存

如何测量JavaScript单个函数的总内存占用

我在调研JavaScript单个函数占用总内存的测量方法,目前找到了performance.memory API,但注意到该API的usedJSHeapSize字段并非仅统计单个页面的内存,还可能跨标签页汇总数据。我的测试场景始终只打开一个标签页,因此仅需统计当前目标标签页的内存即可。
我了解到函数执行后需要等待一段时间,让垃圾回收器清理所有未使用的内存,据此编写了如下测量方案,但不确定该方案是否合理、内存测量逻辑是否正确,希望得到相关建议:

function wait(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

function fun1() {
  // 函数逻辑...
}

function fun2() {
  // 函数逻辑...
}


function measureMemory(functionToMeasure) {
  const memoryStart = performance.memory.usedJSHeapSize;
  functionToMeasure();
  const memoryEnd = performance.memory.usedJSHeapSize;
  return memoryEnd - memoryStart;
}


async function runBenchmark() {
  const totalMemoryUsedByFun1 = measureMemory(fun1);
  // 等待2分钟确保垃圾回收清理所有未使用内存
  await wait(120000);
  const totalMemoryUsedByFun2 = measureMemory(fun2);
}

我想确认两个问题:

  • 这种测量函数内存占用的方法是否合理?
  • 等待2分钟是否足够让垃圾回收器清理完所有未使用的内存?

我担忧的异常场景示例

function fun1() {
  // 分配1000KB内存
}

function fun2() {
  // 分配300KB内存
}
// 初始堆大小 = 0
const memoryUsedByFun1 = measureMemory(fun1());
// 此时堆大小为1000KB
// 假设我不等待GC执行,执行完fun1后仅500KB内存被释放
// 测量fun2前的堆大小为500KB
const memoryUsedByFun2 = measureMemory(fun2());
// fun2执行过程中,fun1分配的剩余500KB内存被释放
// 此时计算memoryEnd - memoryStart
// 其中memoryStart为500KB,memoryEnd为300KB(因为fun2执行时释放了fun1留下的500KB)
// 最终计算结果为500KB - 300KB = 200KB
// 这个结果完全不符合实际,因为fun2实际分配了300KB内存

我也了解到存在measureUserAgentSpecificMemory() API,但即便开启了*#experimental-web-platform-features*实验性平台特性,该API似乎也完全无法正常工作。


内容的提问来源于stack exchange,提问作者Krzysztof Kaczyński

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:48:16