son*_*ney 5 javascript garbage-collection memory-leaks google-chrome google-chrome-devtools
我有一个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)
Run Code Online (Sandbox Code Playgroud)
Chrome似乎在内存中保留由表达式new MyClass()(在me设置之前指向的对象)创建的对象,null因为它self在调用中被引用me.do_thing().但是,我会想到调用destroy(),unsets me.do_thing会抛弃构造函数范围内的变量(self在new MyClass()调用中).
我也尝试过使用Underscore.JS的_.bind函数,但遇到了这里描述的同样未解决的问题:'bound_this'引用的实例不是垃圾收集的.
小智 0
即使您将其设置为 null,me 仍然是 window 对象的属性。因此,“我”仍然存在于记忆中。
我认为这可能有帮助:
window.me = new MyClass();
me.do_thing();
delete window.me;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |