Javascript:知道什么时候物体会被垃圾清除
有没有办法知道什么时候物体将被GC处置?我的对象(称为A)在全局数组对象中写入一些变量,因此当对象被垃圾回收时,它自己的变量将停留在全局数组对象中,占用内存。Javascript:知道什么时候物体会被垃圾清除
ps。我有许多对象A,我宁愿不要手动调用一个方法来释放我的全局数组对象。
这是我的情况:
var global_array=[];
function A(x){
global_array.push({who:"A", what:x, id:A.instance++});
this.x=x;
}
A.instance=0;
A.prototype.useIt=function(){
return this.x*2;
}
//will be created an A object and will be garbaged after use by GC
function test(){
var a=new A(10);
var y=a.useIt();
}
test();
//i will never use <a> object again, but global_array hold {who:"A", what:10, id:0)}
不想
A.prototype.dispose=function(){
// free global_array at the correct index
}
感谢。
我不太确定的问题是什么,但我可以告诉你:
你不能确切地告诉当 对象将被垃圾收集
对象不能垃圾 直到所有对它的引用 已被删除,所以保留一个 引用数组中的对象 保存在一个全局变量中将 确保它不是垃圾收集到直到页面卸载。
那么在测试方法结束时从globla_array中清除它呢? 正如你所说,它不会再被使用,清除该信息将是安全的。
编辑:在回答您的意见(因为我觉得我不能把它明确规定),让我们asume你可以知道什么时候对象的是GC:
function objectGetGC(sender)
{
// You still have to implement here how to clear global_array from object data
// javascript won't know how to do it on its own.
}
如果global_array持有对象A的引用,而不是只有数据,它不会是gc ...
希望现在有点清楚我的意思了。
是的,但我更喜欢不手动释放它... – blow 2009-10-26 14:58:25
但是,即使你知道什么时候某个对象被垃圾收集了......你仍然必须手动清除你的数组。正如蒂姆指出的那样,如果您的global_array中有对象A的引用,它将不会被垃圾收集。而且这个引用将是javascript自动从global_array中自动清除引用的唯一方法。 – 2009-10-26 15:19:28
我编辑了我的问题以回答您。 – blow 2009-10-26 14:51:38