Освобождение памяти

Удалите все ссылки на объекты для запуска функции сборки мусора.

Сборщик мусора нельзя запустить в окончательной версии Flash Player. Чтобы при удалении объекта он удалялся при сборке мусора, удалите все ссылки на объект. Помните, что старый оператор delete , знакомый по версиям ActionScript 1.0 и 2.0, ведет себя иначе в ActionScript 3.0. Его можно использовать только для удаления динамических свойств динамического объекта.

Примечание. Сборщик мусора можно вызвать в среде Adobe® AIR® и отладочной версии Flash Player.

Например, следующий код задает для ссылки Sprite значение null :

var mySprite:Sprite = new Sprite(); 
 
// Set the reference to null, so that the garbage collector removes  
// it from memory 
mySprite = null;

Помните, что при присвоении объекту значения null он необязательно будет удален из памяти. Иногда функция сборки мусора не выполняется, если доступный объем памяти не считается достаточно низким. Поведение функции сборки мусора не является предсказуемым. Сборщик мусора вызывается в результате выделения памяти, а не при удалении объекта. В процессе выполнения сборщик мусора находит структуры объектов, которые еще не были собраны. Он обнаруживает неактивные объекты в структурах путем нахождения ссылающихся друг на друга объектов, которые больше не используются приложением. Обнаруженные таким образом неактивные объекты удаляются.

В больших приложениях этот процесс может интенсивно использовать ресурсы центрального процессора, снижать производительность и заметно замедлять работу приложения. Попробуйте ограничить число проходов по сборке мусора за счет максимально возможного повторного использования объектов. Кроме того, по возможности присваивайте ссылкам значение null, чтобы нахождение объектов при сборке мусора выполнялось быстрее. Сборку мусора следует рассматривать в качестве страховки. По возможности всегда явно управляйте сроком службы объектов.

Примечание. Задание для ссылки на экранный объект значения null не обеспечивает замораживание объекта. Объект и далее создает нагрузку на ЦП, пока не будет удален при сборке мусора. Деактивируйте объект, прежде чем задавать ссылке на него значение null .

Сборщик мусора можно запустить с помощью метода System.gc() , доступного в среде Adobe AIR и в отладочной версии Flash Player. Профилировщик, входящий в состав пакета Adobe® Flash® Builder™, позволяет вручную запустить сборщик мусора. Выполнение сборщика мусора позволяет проследить за реакцией приложения и правильностью удаления объектов из памяти.

Примечание. Если объект использовался в качестве прослушивателя событий, на него может ссылаться другой объект. В таком случае удалите прослушиватели событий с помощью метода removeEventListener() , прежде чем задавать для ссылок значение null .

К счастью, объем памяти, направленной на обработку растровых изображений, можно сразу же уменьшить. Например, класс BitmapData включает метод dispose() . В следующем примере создается экземпляр BitmapData размером 1,8 МБ. Объем текущей используемой памяти увеличивается до 1,8 МБ, и свойство System.totalMemory возвращает меньшее значение.

trace(System.totalMemory / 1024); 
// output: 43100 
  
// Create a BitmapData instance 
var image:BitmapData = new BitmapData(800, 600); 
 
trace(System.totalMemory / 1024); 
// output: 44964 

После этого объект BitmapData вручную удаляется (освобождается) из памяти и выполняется повторная проверка используемой памяти.

trace(System.totalMemory / 1024); 
// output: 43100 
  
// Create a BitmapData instance 
var image:BitmapData = new BitmapData(800, 600); 
 
trace(System.totalMemory / 1024); 
// output: 44964 
 
image.dispose(); 
image = null; 
 
trace(System.totalMemory / 1024); 
// output: 43084 

И хотя метод dispose() удаляет пикселы из памяти, для ссылки по-прежнему необходимо задать значение null , чтобы полностью освободить его. Если объект BitmapData больше не требуется, всегда вызывайте метод dispose() и задавайте для ссылки значение null для немедленного освобождения памяти.

Примечание. В проигрывателе Flash Player 10.1 и в среде AIR 1.5.2 представлен новый метод disposeXML() класса System. С его помощью можно сразу сделать XML доступным для сборки мусора, передав в качестве параметра дерево XML.