【问题标题】:Does this Object.keys(o).forEach(...) iteration in node.js GC keys when it's done?这个 Object.keys(o).forEach(...) 完成后是否在 node.js GC 键中迭代?
【发布时间】:2016-11-16 09:23:13
【问题描述】:

基于this answer,这将“将所有键加载到内存中”:

Object.keys(o).forEach(function(key) {
  var val = o[key];
  logic();
});

完成后是否“释放”了内存?还是需要“nulled”之类的?

【问题讨论】:

  • 什么会被取消?没有引用键列表的变量。
  • 它会将它们加载到内存中,但是在函数之后每个键都会超出范围,因此它们可以被垃圾回收。
  • @4castle 这是否意味着他们成为gc?即,这不会自行导致内存泄漏?
  • 从技术上讲,我们不知道密钥是否会被 GC,因为据我们所知,实现保留列表是为了它自己的目的,但如果是,它不在你的控制范围内和担忧。
  • @sunra 它不会导致内存泄漏,但不能保证何时释放该内存。

标签: javascript node.js memory-leaks garbage-collection


【解决方案1】:

是的,内存将在forEach 完成后被隐式释放,因为之后堆栈上的任何内容都不会再引用Object.keys 创建的数组。 (顺便说一句,没有变量可以无效)

你也可以这样写

{
    const keys = Object.keys(obj);
    keys.forEach(function(key) {
        const val = o[key];
        logic();
    });
}

更明显的是,整个 keys 数组在迭代期间一直在徘徊(与“惰性”for in 枚举相反),并且它在之后立即超出范围(当块结束)。

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2014-12-31
    • 2013-01-16
    • 2011-09-22
    • 2013-09-12
    相关资源
    最近更新 更多