Flex 4: сборка мусора не работает - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть компонент TitleWindow, который я отображаю с помощью PopUpManager.addPopUp (). Когда я закрываю компонент, я вызываю событие closePopUp, которое устанавливает переменную объекта в null следующим образом:

// application
private var myObject:MyObject;

private function openPopUp():void
{
    myObject = new MyObject();
    myObject.addEventListener('closePopUp', closePopUp);
    PopUpManager.addPopUp(myObject, this, true);
}

private function closePopUp(e:Event):void
{
    myObject = null;
}

Однако в режиме отладки я вижу, что myObject имеет значение null, но использование памяти не уменьшается. Когда я снова открываю компонент, использование памяти остается таким же, как и раньше.

Я бы подумал, что если для переменной myObject установлено значение null, GC перезагружает объект и освобождает память. Есть идеи, почему этого не происходит?

Ответы [ 2 ]

4 голосов
/ 22 ноября 2010

Попробуйте удалить прослушиватель событий, я думаю, что его зависание не даст GC собрать ваш объект.

3 голосов
/ 22 ноября 2010

Сборка мусора во Flash Player не является точной наукой и работает немного иначе, чем ожидает большинство людей ... Подводя итог, она освобождает память только тогда, когда ей нужно больше. Эти статьи объясняют это более подробно:

http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html

Кроме того, как говорит Дейн, слушатели событий являются наиболее распространенной причиной утечек памяти во Flash. Вы должны быть очень осторожны и всегда пытаться удалить их.

...