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

无限while循环调用Promise.then触发堆内存溢出的原因求解

问题原因分析
  • 事件循环执行顺序限制:JavaScript 采用单线程事件循环模型,同步任务的执行优先级高于所有微任务,Promise.then 注册的回调属于微任务,会被推入微任务队列等待所有同步任务执行完成后才会调度。代码中的 while(true) 是无限运行的同步死循环,会持续占用主线程,导致所有 then 回调永远得不到执行,自然不会输出任何内容。
  • 内存持续溢出的核心原因:每次循环调用 promise.then() 都会创建一个全新的 Promise 实例以及对应的回调函数对象,这些对象都会占用 V8 引擎分配的堆内存。由于主线程始终被同步死循环占用,垃圾回收器没有运行窗口,不断生成的对象无法被回收,堆内存占用会持续攀升,直到超过引擎的内存配额,触发堆内存溢出报错。
  • 补充说明:即使不存在同步死循环阻塞,当前代码的 .then((v) => v) 也不会输出 4,回调仅将参数原值返回,没有执行 console.log(v) 打印逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:45:04