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

Ale*_*ass 3 javascript garbage-collection object node.js

如果我无法避免在 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

    // now I don't need user1 anymore
}
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,我知道这段代码很糟糕,但我认为它表达了我的观点)

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

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

Rom*_*ain 6

GC 负责处理所有未引用的内容。您的代码按原样是“GC 兼容”的,因为在调用 后createUserAndGreet(),所有引用都被销毁。

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