【发布时间】:2015-02-20 05:40:16
【问题描述】:
我的节点/javascript 程序收到大量消息。 每次收到消息时,我都会创建一个新对象,并将消息内容传递给它。 在新对象构造函数中,对象做了很多事情,包括一些带有回调的 mongo 操作。
当在对象构造函数中执行的操作完成时,不再需要或不需要该对象。
经过一些涉及复杂性的实验(即将对象存储在数组元素中或作为“主”对象的属性然后删除它,我尝试了简单的方法。
var x = new DisposableObject(message);
delete x;
这似乎工作正常。任何时候都可能存在许多 DisposableObject 实例。 DisposableObject 被创建并在测试中完成所有预期的事情。 我假设当我删除“x”时,这不会影响对象本身,只会影响“x”中包含的对它的引用。对象回调发生,一切都很好。
那么四个问题:
- 这种简单的机制是否允许垃圾收集器 (node/V8) 摆脱对象?
- 是否有一些可怕的活板门在等待我的代码,因为我正在这样做?
- 当我的程序中没有对它们的活动引用时,浮动的多个 DisposableObject 实例等待回调是否存在任何问题?
- 有没有更好的方法来创建对象,然后确保它们在所有操作完成后可以被垃圾回收?
【问题讨论】:
-
删除 x;不做你描述的事情,除非 x 是全局的,即使那样它也不能完全按照你的想法做......
-
回调中的私有变量或任何函数将在函数完成时被清理,如果没有其他需要其中的数据。
-
所以我认为你是说我不需要做任何事情来让对象成为 gc 的。它实际上是在回调中创建的
标签: javascript node.js garbage-collection javascript-objects