![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Цитата:
По поводу pauseForGCIfCollectionImminent .Я так понял метод позволяет указывать сборщику нужные моменты для сборки мусора.На всякий случай добавил вызов System.pauseForGCIfCollectionImminent(0); Качественно картина не изменилась. |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Цитата:
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Как я говорил выше хотелось бы чтоб после зачистки мусора объем занятой памяти возвращался к уровню как до старта игры.Пока такое происходит только после нажатия force garbage collection в скауте.Похоже, у скаута какие-то свои механизмы освобождения памяти
|
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
В реальных условиях память очистится только тогда, когда gc решит её очистить.
|
|
|||||
|
Не совсем так. На мобильниках это очень важный момент. Там System.pauseForGCIfCollectionImminent() с указанием процента засоренности памяти, при которой будет очистка, работает на ура. Проверено. Очищает память сразу после вызова, если ее объем больше, чем указано в параметре, я обычно указываю 0.25, и этого вполне хватает
|
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
Цитата:
Добавлено через 8 минут caseyryan,Объясни плз в двух словах как работает System.pauseForGCIfCollectionImminent достаточно его один раз вызвать не обязательно его дергать как System.gc? |
|
|||||
|
Нет, его суть просто в том, что он вызовет сборщик мусора только в том случае, если объем занятой мусором отведенной среде AIR оперативки (в процентном соотношении), будет больше того, что указан в параметре метода. То есть если ты вызовешь его так:
То в момент вызова пройдет проверка сколько процентов памяти занято мусором. Если окажется, что занято больше 25%, то произойдет очистка мусора. Если меньше, то ничего не произойдет. Этот метод придуман для того, чтобы сделать эти сборки мусора более предсказуемыми. Я его использую в своих играх после завершения локации. Между локацией и переходом в меню, чтобы автоматическая сборка мусора вдруг не произошла во время боя, к примеру, и из-за нее все либо подвиснет на какое-то время, либо вообще вылетит. А при переходе в меню, когда основная нагрузка уже снижена, как раз самое то вызывать сборку мусора Цитата:
короче говоря, если ты поставишь System.gc() то по логике он должен в любом случае очищать мусор, а если System.pauseForGCIfCollectionImminent() то только при определенном проценте скопления мусора У тебя возможно ни то ни другое не работает потому, что где-то есть ссылки на объекты. Думается мне, что у тебя либо вообще нет деструкторов, либо в них половина объектов пропущена. Иначе бы и слушатели удалял там же. У меня работают оба метода без проблем. Скаут это отлично показывает |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
понапихал вызовов
System.pauseForGCIfCollectionImminent(.25); посмотрим как поведет.Почему скаут зачищает память лучше самого флэша вопрос остается открытым. Добавлено через 3 минуты Цитата:
Деструкторы действительно пишу только для компонентов, работающих с растром. |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Цитата:
Цитата:
|
|
|||||
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 22:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|