JavaScript无限循环和堆内存限制 - 致命错误:达到堆限制分配失败 - JavaScript堆内存不足
P粉773659687
P粉773659687 2024-03-27 20:21:43
0
1
386

我正在尝试运行一些需要循环无限期运行的脚本(直到满足特定条件,但这可能需要永远)。循环内的操作非常简单,不会创建新变量、将元素推送到数组或进行新调用。基本上,至少在我看来,每个循环都没有使用新资源。然而,我最终遇到了臭名昭著的错误:

fatal error: reached heap limit allocation failed - javascript heap out of memory

我一直在研究循环中的内存使用情况,为了简单起见,我的问题可以被认为与此类似:

async function main(){
    let n = 5;
    while(1){
        console.log("number: " + n + "; squared: " + n**2);
        console.log(process.memoryUsage());
    }    
}

我发现尽管“什么也没做”,但每个循环的堆使用量都在不断增长。我尝试了相同的将循环转变为递归函数,得到了类似的结果。我也熟悉更改堆内存大小分配,但这不是这种情况的解决方案,因为我需要它无限期地运行。

我应该使用什么编码公式来运行这样的循环?我应该改变什么才能在不增加堆的情况下实现这一点?我对垃圾收集器有所了解,我可以认为正是这个功能造成了限制,但无法真正理解原因。在我看来,我想做的这件事是一个非常简单的需求,许多其他人都会遇到过,而且我不敢相信 Java 就这样禁用了它。

感谢您的回答

P粉773659687
P粉773659687

全部回复(1)
P粉879517403

我强烈建议使用 setInterval 或 requestAnimationFrame。 JavaScript 是单线程的,这可能会导致无限循环(即使在异步函数中),从而可能阻止其他代码的执行。

我希望这能解决您的问题。

let n = 5;

function someFunction() {
  console.log("number: " + n + "; squared: " + n ** 2);
  console.log(process.memoryUsage());
}

someFunction();
setInterval(performTask, 1000);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!