如何在Javascript(Node.js)中标记垃圾收集的“新”对象

时间:2014-08-29 11:29:35

标签: javascript node.js object garbage-collection

如果我不能使用" new"我的Node.js应用程序中的关键字,如何有效地标记对象进行垃圾回收?我用一个相当高级别的构造函数创建了一个新对象(我的意思是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因内存泄漏而臭名昭着,所以我只想知道是否有办法解决这个问题。

1 个答案:

答案 0 :(得分:3)

GC会处理未引用的所有内容。您的代码是" GC兼容"因为,在调用createUserAndGreet()之后,所有引用都被销毁了。

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