#flash #actionscript-3 #actionscript #garbage-collection
#flash #actionscript-3 #actionscript #сбор мусора
Вопрос:
Я понимаю, что объекты, на которые ничто не ссылается, являются собранным мусором, и я убедился, что ссылки на объекты, на которые я ссылаюсь, обнуляются, когда я с ними закончу. Я хочу знать несколько вещей:
-
Нужно ли ссылаться на нуль только на объекты? Number, int, String и т.д. Можно оставить, верно? Есть ли лучшая практика для этого?
-
Как часто обычно выполняется сборка мусора? Имеет ли тенденцию выполняться при низкой загрузке процессора?
-
Есть ли способ, которым я могу указать сборку мусора запускать вручную, например, когда я закончу с игровым полем, полным спрайтов? На самом деле это не требуется, если сборка мусора имеет тенденцию выполняться при низкой загрузке процессора, поскольку она все равно будет выполняться в то время, когда я этого захочу.
-
Объекты, созданные только для области действия оператора if или for и т.д., Если им не назначено ссылочное программное обеспечение, имеют право на сборку мусора, верно?
Комментарии:
1. Просто К вашему сведению по номеру 4: в actionscript нет области действия блока. Только
local
иglobal
. Любая переменная, определенная вfor
илиif
, обычно принадлежит ее функции и не выпадет из области видимости, пока ее функция не будет выполнена. Кроме того, замыкания сохраняют области действия дольше, чем вы могли бы подумать.
Ответ №1:
у gskinner есть хорошая статья о GC во flash Player
- Ссылки на нуль должны быть только на объекты, созданные оператором new, оператор фигурных скобок ({x:5, y: 5}) и оператор квадратных скобок ([1,2,3]) должны содержать ссылки на нуль.
- Сборщик мусора использует набор эвристик, которые, помимо прочего, учитывают распределение оперативной памяти и размер стека памяти, чтобы определить, когда запускать.
- Вы можете использовать System.gc() для запуска вручную в FP10, но это работает только в отладочном проигрывателе.
- Да, это верно
Комментарии:
1. 1. Это делает это очень понятным для меня — для всего, что я использую «new», мне нужно позже установить значение null. Потрясающе! 2. Означает ли это, что он обычно запускается только тогда, когда память начинает заполняться, или также при низкой загрузке процессора? Я думаю, что меня в основном беспокоит часть сборки мусора, связанная с меткой.
2. GC запускается, когда ваше приложение заполняет выделенную память вашего экземпляра приложения. Это не зависит от требований процессора.
3. Это позор. Я хотел бы иметь возможность запускать (или даже запрашивать) сборку мусора в моменты, когда я знаю, что программа не будет много делать. Я думаю, что это зависит только от меня, чтобы убедиться, что неиспользуемые элементы отключены или переработаны. Спасибо за вашу помощь!
4. Во Flash 11 вы можете дать системе подсказку, что сейчас подходящее время для сборки мусора: help.adobe.com/en_US/FlashPlatform/reference/actionscript/3 /…
5. Исправьте свой ответ: 1. Только объекты, созданные оператором new, оператором фигурных скобок (
{x:5, y:5}
) и оператором квадратных скобок ([1,2,3]
), должны иметь нулевую ссылку.