URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6464
[ Назад ]

Исходное сообщение
"Firefox и освобождение памяти. JS"

Отправлено wDevil , 06-Авг-09 06:05 
Не совсем понимаю как выделяется и освобождается память в ФФ. Пример:
var images = new Array();
for(i=0; i < 2000; i++) {
  var img = document.createElement('img');
  img.src='http://localhost/drawer/'+i;
  images.push(img);
}
drawer - выдает пнгшки пустые.

ФФ при этом слопал до 300 метров памяти. Теперь если удалять массив картинок память уже не высвобождается. Была мысль,что проблема в том, что картинки я не прикрепляю к дереву. Сделал еще один тест, где прикреплял картинки в дерево документа и потом удалял их все в цикле. Результат то же. Что я не учитываю?


Содержание

Сообщения в этом обсуждении
"Firefox и освобождение памяти. JS"
Отправлено Thirteensmay , 06-Авг-09 10:58 
Сразу она может не высвобождаться, сборщик мусора может работать не сразу по факту, а переодически, с целью экономии ресурсов, если после удаления подождать несколько минут ?

"Firefox и освобождение памяти. JS"
Отправлено wDevil , 06-Авг-09 13:56 
минут 5 ждал - ничего

"Firefox и освобождение памяти. JS"
Отправлено Thirteensmay , 06-Авг-09 14:20 
так а удаляете как, из DOM типа parentNode.removeChild(), или только ссылки из массива ?

"Firefox и освобождение памяти. JS"
Отправлено wDevil , 06-Авг-09 17:15 
>так а удаляете как, из DOM типа parentNode.removeChild(), или только ссылки из
>массива ?

в примере выше я не аппендю объекты в документ, потому и удаляю просто ссылки из массива. Второй тест, который писал, там аппендил и удалял, соответственно, removeChild'ом


"Firefox и освобождение памяти. JS"
Отправлено Thirteensmay , 06-Авг-09 18:12 
вы бы примерчик полный показали, с удалением, было бы лучше, че там лишних пару строк. Вот у меня к примеру если так то все нормально освобождается:

<script>
function doCreate()
{
  images = new Array();
  for(i = 0; i < 300000; i++)
  {
    var img = document.createElement('img');
    img.src='http://localhost/1.bmp';
    images.push(img);
  }
}

function doDel()
{
  delete images;
}
</script>
<button onclick='doCreate()'>doCreate()</button>
<button onclick='doDel()'>doDel()</button>

захавывает 250 метров и жмет пока не doDel(), а после doDel() в течение полутора минут освобождает.


"Firefox и освобождение памяти. JS"
Отправлено wDevil , 06-Авг-09 18:22 
Хм. А можно узнать какая ОС? Завтра на работе попробую еще разок, может я что-то перемутил. Удлание делал:
1. delete images
дальше польши все варианты в порядке бреда:
2. images = null
3. for(var i=0; i <images.length;i++) {
delete(images[i]);
//images[i] = null;
}
delete images;

Тесты я проводил на 3.0.12 в Ubuntu 9.10.


"Firefox и освобождение памяти. JS"
Отправлено Thirteensmay , 06-Авг-09 19:15 
у меня 3.5.2 под XP, и images = null, и = new Array(), и пр. сейчас специально попробовал ;) все нормально высвобождается.