确保对象可以被垃圾回收
Ensuring object can be garbage collected
我的node/javascript程序收到很多消息。每次收到消息时,我都会创建一个新对象,并向其传递消息内容。在新的对象构造函数中,对象会做很多事情,包括一些带有回调的 mongo 操作。
在对象构造函数中执行的操作完成后,不再需要或不需要该对象。
经过一些涉及复杂性的实验(即将对象存储在数组元素中或作为"master"对象的属性,然后删除它(,我尝试了简单的方法。
var x = new DisposableObject(message);
delete x;
这似乎工作正常。 任何时候都可能存在许多可处置对象的实例。 创建可处置对象,并在测试中执行所有预期操作。我假设当我删除"x"时,这不会影响对象本身,只是"x"中包含的对它的引用。 对象回调发生,一切都很好。
所以四个问题:
- 这种简单的机制是否允许垃圾回收器(node/V8(摆脱对象?
- 是否有一些可怕的活板门等待我的代码,因为我正在这样做?
- 当我的程序中没有对它们的活动引用时,多个 DisposableObject 实例浮动等待回调是否存在任何问题?
- 有没有更好的方法来创建对象,然后确保在完成所有操作后可以对它们进行垃圾回收?
Javascript使用非代标记和扫描垃圾收集器,在javascript对象不再需要时会自动进行垃圾回收,因此您不必担心垃圾回收。
但是您必须牢记以下几点(来自此答案(:
-
您正在尝试使用
delete
不会真正删除对象,delete
仅对对象的properties
有效。它对variable
或函数名称没有影响,每当使用new
语句创建对象时,请使用delete
语句,将其与 delete 语句配对。这可确保与对象关联的所有内存(包括其属性名称(都可用于垃圾回收。删除语句在"释放对象"中进行了更多讨论。 -
使用
var
关键字。任何没有var
关键字创建的变量都是在global
范围内创建的,并且永远不符合垃圾回收的条件,从而有可能出现内存泄漏。
对于全局变量 ,全局变量永远不会由 GC 处理,因为全局变量将始终存在。将其设置为
null
将允许收集它引用的内存。 对象使用的内存将有资格进行收集。但是该变量仍然存在,它只是引用null
(此处更多(
- Python Javascript哈希库,以确保JSON对象在传输过程中不会损坏
- 在ES2015中,如何确保所有方法都等待对象初始化?使用ES7装饰器
- 使用 javascript 进行 OOP 编程:确保无论对象如何实例化,这都指向正确的事物
- jQuery - 扩展对象,同时确保数组成员的完整性
- 确保对象可以被垃圾回收
- Javascript:如何确保"这个“;在一个对象内总是相同的
- 使用bind来确保方法引用对象,但它不引用对象;似乎不起作用
- 在从Flash调用javascript对象之前,请确保该对象存在
- 什么'在处理多级对象时,确保JavaScript对象已设置且未定义的最佳实践
- 有没有一种正确的方法可以确保一次只有一个用户使用REST+HTTP对对象进行更改
- 如何确保变量是一个对象
- HTML5 Javascript:如何确保绘制的对象不能离开画布
- 有必要使用双感叹号(!!)来确保对象不是null吗
- 我怎样才能确保'this'引用对象文字中的对象文字
- Javascript:确保闭包中的对象被垃圾收集
- 如何确保承诺链返回一个对象
- 确保通过函数传递的对象属性等于某些值
- 如何确保两个独立的javascript对象的属性被链接
- 如何确保返回对象文本中的方法调用使用预期的“this”
- 确保在调用函数 - angularJS 之前定义了对象