我有一个 Javascript 垃圾收集/内存泄漏问题。我在 OS X 10.8.4 上使用 Chrome 28.0.1500.71。
以下代码永远不会释放所持有的空间,me
我不知道为什么。
var MyClass = function() {
this.x = 1;
var self = this;
this.do_thing = function() {
self.x++;
};
};
MyClass.prototype.destroy = function() {
delete this.do_thing;
};
var me = new MyClass();
me.do_thing();
me.destroy();
me = null;
// the MyClass object formerly known as 'me' is still allocated here
// (as evidenced by Chrome's heap profiler)
Chrome 似乎将表达式创建的new MyClass()
对象(在me
设置为 之前指向的对象)保留在内存中,因为它在对 的调用中null
被引用。但是,我会认为调用, unsets会丢弃构造函数范围内的变量(在调用中)。self
me.do_thing()
destroy()
me.do_thing
self
new MyClass()
我也尝试过使用 Underscore.JS 的_.bind
函数,但遇到了这里描述的同样未解决的问题:Instances referenced by 'bound_this' only are not garbage collected。