Javascript:知道什么时候对象会变成垃圾

时间:2009-10-26 14:27:38

标签: javascript object garbage-collection dispose

有没有办法知道GC何时处理一个物体?

我的对象(称之为A)在全局数组对象中写入一些变量,因此当对象被包含时,它自己的变量将保留在全局数组对象中,从而占用内存。

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
}

感谢。

2 个答案:

答案 0 :(得分:2)

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

  1. 你无法确切知道何时 对象将被垃圾收集

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

答案 1 :(得分:0)

那么在测试方法结束时从globla_array中清除它呢? 正如您所说,它将不再被使用,清除该信息将是安全的。

编辑:在回复您的评论时(因为我认为我无法明确说明),让我们知道对象A何时是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 ......

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