Работа Garbage Collector в Flash Player

Это будет короткий пост об особенностях работы GarbageCollector (сборщик мусора), некоторые из которых были для меня новостью. Во-первых давайте напишем следующий код:

import flash.display.Sprite;

function onFrame(e: Event) {
	trace(System.totalMemory);	
	var test = new Sprite();
}

addEventListener(Event.ENTER_FRAME, onFrame)

Запустив его вы убедитесь что плеер выделяет всё больше и больше памяти для себя, и спустя какое-то время, – начинает освобождать. То есть, память очищается не сразу же, как только на объект все ссылки удалены, а только через какое-то время. Графически это выглядит так:

gc-chart

Сборку мусора можно запустить принудительно в debug версии плеера так:

System.gc();

А в обычном плеере, можно воспользоваться хаком:

try {
    new LocalConnection().connect('foo');
    new LocalConnection().connect('foo');
} catch (e:Error) {}

Можно сделать несколько выводов:

  1. Я не показал этого в коде, но на самом деле память начинала расходоваться только с объектов Sprite. Объекты классов int, Number, Object удалялись сразу же.
  2. Мы не имеем контроля над управлением памятью, поэтому есть смысл делать пул объектов, запрашивая экземпляры нужных классов, по мере надобности, периодически подчищая пул. Таким образом мы по крайней мере будем удерживать количество занимаемой памяти, особенно в случае если большое количество объектов создается-удаляется (а в идеале избегать этого).
  3. За памятью нужно постоянно следить, иначе потом будет очень непросто разобраться в чем именно проблема

Более подробно про работу Garbage Collector можно прочитать в статье Гранта Скиннера, он же, пишет про хак, на своем сайте.

Site Footer

Sliding Sidebar

About Me

About Me

For whom this blog for?

For those who are interested in modern Internet technologies, IT business, startups, management, quality control, personal effectiveness, motivation. Here I write about what is interesting, about problems I faced and solutions I found. I hope it will be interesting to you either.

What motivates me to write?

The desire to improve, to study deeper topics that interest me. Find people with similar problems and tasks, together look for ways out and solutions.

Feel free to contact if you have anything to say to me

Old Flash site with my artistic works and misuc.