2009-10-26 88 views
0

有沒有辦法知道什麼時候物體將被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

回答

2

我不太確定的問題是什麼,但我可以告訴你:

  1. 你不能確切地告訴當 對象將被垃圾收集

  2. 對象不能垃圾 直到所有對它的引用 已被刪除,所以保留一個 引用數組中的對象 保存在一個全局變量中將 確保它不是垃圾收集到直到頁面卸載。

0

那麼在測試方法結束時從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

相關問題