![]() |
Сборщик мусора
Кто знает, какие объекты не собирает сборщик мусора, кроме тех, на которых нацеплены eventListener и которые торчат на stagе и её детях?
Проблема с утечками памяти - куча разнообразных объектов которые по идее должны быть собраны, висят в памяти и накапливаются. |
В 99% случаев не нужно искать неведомую хрень которую не собрал сборщик "хотя должен был". В этих же 99% случаев нужно просто еще раз проверить код на наличие ссылок на объекты которые якобы должны были быть удалены.
Мне помогает. Сборщик тут ни при чем ;) |
GC не собирает все "живые" объекты. Это все объекты из display list, загрузки (loader'ы), вроде бы - активные таймеры. Плюс все объекты, до которых по ссылках из "живых" можно дайти. В том числе - ApplicationDomain'ы, загруженые в appdomain'ы классы, сохраненные в статических полях этих классов ссылки.
И я полностью согласен с Dukobpa3 - нужно искать в коде, где не удаляются (или добавляются лишние) ссылки на объекты. |
а ещё анонимные функции часто цепляют в замыкание то что совсем не нужно. Если в коде используются анонимные функции то от них надо избавиться. Они могу быть источником оооочень больших проблем.
|
Aquahawk, насчет функций подтверждаю. Кстати говоря не только анонимные. Вполне возможно где-то вы храните ссылки на эти обычные функции, что тоже приводит к утечкам. Говорю по собственному опыту, такая фигня была. 4000 ссылок на методы сильно съедают память. Профилировщик вам в помощь.
|
когда вы храните ссылку на метод, на самом деле это объект класса MethodClosure который хранит ссылку на объект от которого его оторвали. Итого хранение ссылки на метод какого-то объекта равносильно хранению ссылки на объект.
|
Цитата:
|
Кстати говоря об анонимных функциях . Частенько в приложениях бывает надо спрятать объект ( висибл = фалс ) , через некоторое время посл нажатия кнопки например. Причем приложении такая точка может быть всего одна, ну как тут не сделать setTimeout с анонимкой ?))) можно конечно и отдельную функцию написать с одной строчкой , но толку то)
А еще самый лучший вариант TweenMax.to( obj , 5 , { visible:false }) |
Нет, ты неправ! Самый лучший способ - это
Код AS3:
|
На самом деле замыкание, включает в себя не 2 указателя. Оно включает в себя список (порой очень даже длинный) всех областей видимости, которые доступны там, где оно используется. Иначе не возможно было бы из функции обращаться к глобальным методам и тому, что было импортировано классом.
|
| Часовой пояс GMT +4, время: 22:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.