如何标记一个“新”对象的垃圾收集在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()
范围内,当函数调用结束时,这个范围被销毁。