Javascript: знать, когда объект будет облачен - PullRequest
0 голосов
/ 26 октября 2009

есть ли способ узнать, когда объект будет утилизирован ГХ?

Мой объект (назовите его A) записывает некоторые переменные в глобальный массив-объект, поэтому, когда объект будет выделен, его собственная переменная останется в глобальном массив-объекте, занимая память.

пс. У меня есть множество объектов 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 ]

2 голосов
/ 26 октября 2009

Я не совсем уверен, в чем вопрос, но могу вам сказать следующее:

  1. Вы не можете точно сказать, когда объект будет собирать мусор

  2. Объект не может быть мусором собрал пока все ссылки на него были удалены, поэтому сохраняя ссылка на объект в массиве хранится в глобальной переменной убедитесь, что это не мусор собирается до тех пор, пока страница не будет выгружена.

0 голосов
/ 26 октября 2009

А как насчет очистки его от 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 ...

Надеюсь, теперь немного понятно, что я имею в виду.

...