【问题标题】:How to mark a "new" object for garbage collection in Javascript (Node.js)如何在Javascript(Node.js)中标记垃圾收集的“新”对象
【发布时间】:2014-08-29 11:29:35
【问题描述】:

如果我无法避免在我的 Node.js 应用程序中使用“new”关键字,如何有效地标记对象以进行垃圾回收?我创建了一个具有相当高级构造函数的新对象(我的意思是 new myObj() 实际上在该过程的更深处创建了几个 new Something() 对象。

假设我的构造函数如下所示:

function User(name, age) {
    this.something = x;
    this.greet = function() { return "hello"; };
    this.somethingElse = new OtherThing();
    return this;
}

然后我在另一个函数中创建一个新的User

function createUserAndGreet(name, age) {
    var user1 = new User(name, age);
    user1.greet();

    // now I don't need user1 anymore
}

(顺便说一句,我知道这段代码很烂,但我认为它明白了我的意思)

我让他打招呼后,我该如何摆脱他并释放他占用的内存?

所以如果我用user1 = null; 将user1 设置为null,在我处理完他之后,他会永远消失,GC 会来清理他吗?这也会删除创建的new OtherThing() 吗?或者还有什么我需要做的吗?我听说使用new 因内存泄漏而臭名昭著,所以我只想知道是否有办法解决这个问题。

【问题讨论】:

    标签: javascript node.js object garbage-collection


    【解决方案1】:

    GC 会处理所有未引用的内容。你的代码是“GC-Compatible”的,因为在调用createUserAndGreet()之后,所有的引用都被销毁了。

    关于 GC,您唯一需要关心的是直接附加到 Window 对象(全局对象)的内容,这些内容永远不会被收集。您的两个变量的作用域在 createUserAndGreet() 内,并且在函数调用结束时该作用域被销毁。

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 2011-07-16
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多