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 
} 

感谢。

+0

我编辑了我的问题以回答您。 – blow 2009-10-26 14:51:38

我不太确定的问题是什么,但我可以告诉你:

  1. 你不能确切地告诉当 对象将被垃圾收集

  2. 对象不能垃圾 直到所有对它的引用 已被删除,所以保留一个 引用数组中的对象 保存在一个全局变量中将 确保它不是垃圾收集到直到页面卸载。

那么在测试方法结束时从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 ...

希望现在有点清楚我的意思了。

+0

是的,但我更喜欢不手动释放它... – blow 2009-10-26 14:58:25

+0

但是,即使你知道什么时候某个对象被垃圾收集了......你仍然必须手动清除你的数组。正如蒂姆指出的那样,如果您的global_array中有对象A的引用,它将不会被垃圾收集。而且这个引用将是javascript自动从global_array中自动清除引用的唯一方法。 – 2009-10-26 15:19:28