如果我不能使用" 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
因内存泄漏而臭名昭着,所以我只想知道是否有办法解决这个问题。
答案 0 :(得分:3)
GC会处理未引用的所有内容。您的代码是" GC兼容"因为,在调用createUserAndGreet()
之后,所有引用都被销毁了。
关于GC,您唯一需要关心的是直接附加到Window对象(全局)的内容,这些内容永远不会被收集。您的两个变量的范围是createUserAndGreet()
,并且在函数调用结束时会销毁此范围。