Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сборщик мусора (http://www.flasher.ru/forum/showthread.php?t=178005)

searinox 13.04.2012 03:39

Сборщик мусора
 
Кто знает, какие объекты не собирает сборщик мусора, кроме тех, на которых нацеплены eventListener и которые торчат на stagе и её детях?
Проблема с утечками памяти - куча разнообразных объектов которые по идее должны быть собраны, висят в памяти и накапливаются.

Dukobpa3 13.04.2012 03:45

В 99% случаев не нужно искать неведомую хрень которую не собрал сборщик "хотя должен был". В этих же 99% случаев нужно просто еще раз проверить код на наличие ссылок на объекты которые якобы должны были быть удалены.

Мне помогает. Сборщик тут ни при чем ;)

maxkar 13.04.2012 12:16

GC не собирает все "живые" объекты. Это все объекты из display list, загрузки (loader'ы), вроде бы - активные таймеры. Плюс все объекты, до которых по ссылках из "живых" можно дайти. В том числе - ApplicationDomain'ы, загруженые в appdomain'ы классы, сохраненные в статических полях этих классов ссылки.

И я полностью согласен с Dukobpa3 - нужно искать в коде, где не удаляются (или добавляются лишние) ссылки на объекты.

Aquahawk 13.04.2012 12:57

а ещё анонимные функции часто цепляют в замыкание то что совсем не нужно. Если в коде используются анонимные функции то от них надо избавиться. Они могу быть источником оооочень больших проблем.

ramshteks 13.04.2012 20:14

Aquahawk, насчет функций подтверждаю. Кстати говоря не только анонимные. Вполне возможно где-то вы храните ссылки на эти обычные функции, что тоже приводит к утечкам. Говорю по собственному опыту, такая фигня была. 4000 ссылок на методы сильно съедают память. Профилировщик вам в помощь.

Aquahawk 13.04.2012 20:40

когда вы храните ссылку на метод, на самом деле это объект класса MethodClosure который хранит ссылку на объект от которого его оторвали. Итого хранение ссылки на метод какого-то объекта равносильно хранению ссылки на объект.

gloomyBrain 13.04.2012 20:49

Цитата:

Итого хранение ссылки на метод какого-то объекта равносильно хранению ссылки на объект
Ну в общем - логично. По сути-то есть всего одна функция, которой просто передается разный this. Мне не совсем понятно, почему при таком раскладе MethodClosure занимает хоть сколько-нибудь заметную память. Ибо это структура из 2 указателей: на функццию и на объект-обладатель.

in4core 13.04.2012 21:03

Кстати говоря об анонимных функциях . Частенько в приложениях бывает надо спрятать объект ( висибл = фалс ) , через некоторое время посл нажатия кнопки например. Причем приложении такая точка может быть всего одна, ну как тут не сделать setTimeout с анонимкой ?))) можно конечно и отдельную функцию написать с одной строчкой , но толку то)
А еще самый лучший вариант TweenMax.to( obj , 5 , { visible:false })

gloomyBrain 13.04.2012 21:44

Нет, ты неправ! Самый лучший способ - это
Код AS3:

TweenMax.to({}, 0.1, {onComplete: function():void {TweenMax.to({}, 0.1, {onComplete:arguments.callee})}})


wvxvw 13.04.2012 21:46

На самом деле замыкание, включает в себя не 2 указателя. Оно включает в себя список (порой очень даже длинный) всех областей видимости, которые доступны там, где оно используется. Иначе не возможно было бы из функции обращаться к глобальным методам и тому, что было импортировано классом.


Часовой пояс GMT +4, время: 22:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.