gpt4 book ai didi

javascript - 在 JS/NodeJS 中,当对象从数组中删除时会发生什么?

转载 作者:行者123 更新时间:2023-12-01 02:12:09 25 4
gpt4 key购买 nike

我想运行一组神经网络训练器,它像这样无限循环地运行:

Trainer.prototype.tick = function(){
// do the try something and record the score
setTimeout(function(){
this.tick()
},0);
}

到目前为止,它表现良好,但当我想更新训练数据和神经网络时,我将从数组中删除训练器实例并替换为新实例。那么问题是它真的会删除旧实例并释放内存吗?

最佳答案

Javascript 是一种垃圾收集语言。这意味着当没有事件的、可访问的代码仍然引用该对象时,它会自动从内存中删除对象。因此,如果您从数组中删除该对象,并且代码中没有其他变量或属性引用该对象,则该对象将有资格进行垃圾回收,并且系统将释放它占用的内存。

当您的 setTimeout() 处于事件状态时,仍然存在对您的对象的引用,因此在 setTimeout() 触发之前无法对其进行垃圾回收。但是,由于您使用的计时器值为 0,计时器将很快触发,并且对该对象的特定引用将被清除。

但是,您的 setTimeout() 会立即尝试调用 this.tick()。如果该调用成功,它将设置另一个 setTimeout(),因此它永远不会停止,也永远不会被垃圾收集。您必须停止设置新的计时器才能对其进行垃圾收集。

但是,在您显示的代码中,this 的值不会指向您的 Trainer 对象,因此调用 this.tick() 将失败,并且不会设置新的计时器,一旦 setTimeout() 运行并且 this.tick() 调用失败,对象就会准备就绪用于垃圾收集。

关于javascript - 在 JS/NodeJS 中,当对象从数组中删除时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49684887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com