![]() |
Куда девается память ?
Я раньше писал на С++ и привык что память нужно удалять самому. Теперь пишу на АС и не уверен в правильности работаты с памятью. Концепция Garbage Collector, хорошая, но детали ей работы не понятны. Например такой код.
Код AS3:
|
Удалит.
з. Ы. У спрайта нет аргументов в конструкторе. |
если остались ссылки, то будет утечка.
Код AS3:
|
АС3 в этом плане оч интересен. тут надо не меньше чем в сях следить за памятью.
Если не юзаете больше объект, удалите сначала все, что на него навесили, а потом сделайте объект = NULL; Причем, перед тем, как кончать навеску, проверьте if (объект !== NULL) { мочить все! } а вот вам еще пример "утечки": этот код Код AS3:
Код AS3:
|
А если так
Код AS3:
|
если в some code ничего существенного не будет - всё нормально, ссылки не станет, объект удалится(может быть, когда-нибудь, когда GC сочтёт что так надо).
|
Ну а если так
Код AS3:
|
Anton Bel, откуда Вы берёте 100,100 в параметрах?
|
а к чему такие махинация с объявлениями экземпляров ?
можно подробнее ? |
Это код для примера. Придумываю на ходу. Sprite тоже класс для примера, можно использовать Sprite2, если хотите.
Вопрос только об управлении памятью. |
Цитата:
почему вы пишете именно "!==", а не "!=" - в чем тут будет отличие, или на чем вы хотели акцентировать внимание? - объясните, пожалуйста |
ну это как бы ударение своего рода
автор придумывает на ходу код :) ну вот и я подумал, что два знака равно надежнее одного :) так сказать, вероятность того, что 1!==2 выше, чем 1!=2 на самом деле автор этой темы писал раньше на сях. а если мне не изменяет память, то АС3 null эквивалентен CPP NULL стало быть поймет. А != равнозначно !==, на сколько мне известно. Т.е. интеллектуальный компилятор понимает и то и другое одинаково воспринимайте !== как акцент |
Цитата:
|
Нет, в вашем примере память не убежит.
s2 умрет когда закончится выполнения метода, а s1 вы прибиваете явно. Популяции Sprite`ов не выжить. |
Crenth, хочу вас расстроить.
не только компилятор поймёт != и !== как разные операторы, но и даже сам FlashPlayer их поймёт по разному. |
Цитата:
Кстати, ЗНАНИЕ есть продукт "жизнедеятельности" интеллекта. Т.е. если мы думаем что знаем, то скорее всего мы просто помним, обладаем информацией всего лишь. Но чтобы ИНФОРМАЦИЯ превратилась в ЗНАНИЕ, ее надо подвергнуть анализу и синтезу Цитата:
Код AS3:
я просто спросил на всякий случай, что если чего-то не знаю)))))) |
Цитата:
естественно я очень много не знаю - потому и задал вам тот вопрос, меня смутило, что в AS3 нет NULL и ваше использование !== оказалось, что вы там действовали бездумно, а я искал сокровенный смысл, чтобы разобраться в том, чего я не знаю |
да, пожалуй
|
Цитата:
Код AS3:
|
Цитата:
Код AS3:
|
Crenth, если вы спросите у ребёнка, показав на системный блок он скажет, что это коробка и показав на картонную коробку он тоже скажет что это коробка. После этого вы станете утверждать, что у них одно и то же предназначение - для перевозки вещей/хранения микросхем или попробуете узнать побольше?
А теперь вопрос не риторический. Как вы думаете, зачем ввели два оператора (!=, !==), если они делают одно и то же? |
В результате анализа и синтеза я пришел к выводу,
что директива != и !== одинаково корректно работает, когда слева ссылка на объект, а справа null когда я уничтожаю объект, пишу Код AS3:
Возвращаю вас к разговору об утечках памяти и методах контроля над процессом освобождения ее :) Я в АС3 новичок. До сих пор не могу взять в толк, почему для передачи 2-х байт chunk_size в протоколе RTMP Адобы используют 4 байта :) |
Цитата:
|
Crenth, совершенно верно, в "сомнительных" местах кода такие проверки обязательны.
|
|
http://dtf.ru/articles/read.php?id=51967
вот это я прочитал и на меня снизошло просветление. |
Цитата:
Цитата:
|
2orcpochta: Это человек не отличает flex framework от flex sdk. Имеется вввиду, что писать игрушки в flex framework неудачная затея - потому что он тяжелый и медлительный.
|
там сказано, что автор статьи ничего не понимает в разработке на Flash Platform.
|
А вы видели этот класс из статьи: MemoryController.as? Оно вообще работает?
|
Цитата:
Код AS3:
|
Ну, с LocalConnection() - известный факт. А вот doSimpleClean() у меня вызывает сомнения - я не вижу причины чтобы этот метод вызвал gc.
|
на моей памяти эта бредовая статься на форуме обсуждается уже не первый раз, и каждый раз у людей одинаковые сомнения.
|
а фишка с LocalConnection разве работает не в debug-версии?
|
Работает.
Да и смысл в дебаговом такую муть делать - там есть родной System.gc(). |
смысла принудительно вызывать gc вообще нет. Насколько я знаю, в некоторых случаях, он вообще сам-собой слишком часто вызывается и вызывает тормоза и приходится держать прямые сслылки.
|
iflamberg, объясните пожалуйста связь gc и прямых ссылок?
p.s.: а принудительно вызывать gc на самом деле очень мало смысла. |
а диспозить битмэпы, когда удаляешь их содержащие объекты - это ересь?))
|
как это к gc относится?
|
нет, но это тоже косвенно касается очистки памяти
|
| Часовой пояс GMT +4, время: 21:41. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.