有没有办法知道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
}
感谢。
答案 0 :(得分: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 ......
希望现在有点清楚我的意思。