Просмотр полной версии : Почему объекты UIComponent не удаляются из памяти?
С помощью TheMiner обнаружил, что объекты UIComponent и унаследованные от него, не удаляются из памяти. То есть, созданный с помощью кода new Group() компонент, так и остается в памяти, даже если будет создано несколько десятков экземпляров, при том, что объект даже никуда не добавляется.
На них остались ссылки.
GC не был вызван.
...
Да никаких ссылок! Я просто в конструкторе другого объекта написал строчку:
new Group();
все!
А в TheMiner использование Force Garbage Collector ничего не дает
Добавлено через 8 минут
Использование System.gc(); действительно помогло. Но тогда еще один вопрос, почему при добавлении к объекту листенера, и последующем удалении, не используя weak reference, объект все равно остается в памяти?
Вы можете выдавать за раз больше информации по вашему вопросу?
Как добавляете?
Когда добавляю вот так:
addEventListener("complete", onCompleted, false, 0, true);
и потом
removeEventListener("complete", onCompleted);
тогда объекты удаляются
а вот когда просто:
addEventListener("complete", onCompleted);
и при этом удаляю
removeEventListener("complete", onCompleted);
тогда объекты не удаляются из памяти
Вы знаете, ваша проблема понятнее не стала. Поверьте, я знаю синтаксис этих методов. Вопрос был где и к какому объекту вы добавляете слушателей.
К самому себе в самом себе, должен удалиться.
Возможно ли вообще во время исполнения программы отследить, кто держит объект в памяти?
В адобовском профайлере можно. За остальные не знаю.
djyamato
09.07.2012, 21:09
В адобовском профайлере можно. За остальные не знаю.
Это в билдере? А где там это посмотреть ? Где в профайлере посмотреть кто "держит" слушателями ?
Astraport
10.07.2012, 11:57
Никогда не использовал System.gc();
Стоит ли его юзать между переходами по View в мобильных флексовых приложениях для улучшения производительности?
Это в билдере? А где там это посмотреть ? Где в профайлере посмотреть кто "держит" слушателями ?
http://help.adobe.com/ru_RU/flashbuilder/using/WSe4e4b720da9dedb5510654d812e4d126514-8000.html#WSbde04e3d3e6474c4-5d72d86212647a7ea30-7ffd
Никогда не использовал System.gc();
Стоит ли его юзать между переходами по View в мобильных флексовых приложениях для улучшения производительности?
Вызов gc ресурсоемкая операция и принудительно вызывать его (если в этом возникла необходимость) нужно в моменты наименьшей нагрузки. Для управления gc можно также использовать System.pauseForGCIfCollectionImminent() (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/System.html#pauseForGCIfCollectionImminent()).
Вот еще видео по использованию профайлера в билдере, кому интересно http://vimeo.com/13359564
Спасибо!
Добавлено через 25 часов 40 минут
Следующая проблемма вот в чем. Есть очень большой проект на flex, и когда я запускаю профайлер с опцией Generate object allocation stack traces, чтобы узнать, кто же держыт объекты в памяти, и делаю снимок памяти, то так и не могу дождаться окончания этого процесса. Есть ли какие то еще методы узнать, что держит определенные объекты в памяти?
Добавлено через 29 часов 16 минут
Все, разобрался. По видимому профайлер не без глюком, по этому иногда приходиться по нескольку раз остановить и запустить снова снапшот памяти, если он висит
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.