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

如果我不能避免在我的Node.js应用程序中使用“新”关键字,我如何有效地标记对象的垃圾回收? 我用一个相当高层次的构造函数创build一个新的对象(我的意思是new myObj()实际上在这个过程中创build了几个new Something()对象。

假设我的构造函数看起来有点像下面这样:

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

然后我在另一个函数中创build一个新的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会来打扫他吗? 这是否也会删除创build的new OtherThing() ? 还是有什么我需要做的? 我听说使用new对于内存泄漏是臭名昭着的,所以我只想知道是否有办法解决这个问题。

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

你唯一需要关心的东西是直接连接到Window对象(全局variables),这些都不会被收集。 你的两个variables在createUserAndGreet()范围内,当函数调用结束时,这个范围被销毁。