Про Tizen, HTML5-приложения и большое потребление памяти

В последнее время наша команда разработчиков занимается портированием нескольких игр под платформу Tizen (Linux based):

Linux TRATS2 3.0.15-00002-g277d62a #1-Tizen SMP PREEMPT Tue Jul 16 13:12:44 KST 2013 armv7l GNU/Linux

Есть игра X, которую решили писать на HTML5 (в качестве фреймворка был выбран Cocos2D HTML5). И вот писали наши разработчики эту игру целых четыре месяца, а потом выяснилось, что игра уже через небольшой промежуток времени начинает сильно тормозить, а потом и вовсе зависает (вместе с самим Tizen-устройством).

Первая мысль — где-то течет память. Начали профилировать приложение, смотреть, сколько памяти потребляет JavaScript. Нашли проблемные участки, залатали. Но на общий процесс тормозов и зависаний это не сказалось. Хм… Тут нам бы очень помог сам Tizen, если бы умел выводить информацию об используемой и свободной памяти (в Android’е это настраивается в разделе разработчика). Tizen же настолько сырой, что ничего подобного в нем нет (потом, возможно, и появится). Тем не менее, к устройству можно подключиться через sdb (аналог adb), и через консоль устройства вызвать нужные команды для просмотра памяти устройства.

sdb shell
sh-4.1$ free

total used free shared buffers cached
Mem: 797944 779236 18708 0 7256 153432
-/+ buffers/cache: 618548 179396

Видим, что устройство обладает ~780 МБ оперативной памяти. Сама операционная система занимает порядка 300 МБ. Вычисляем: 780 — 300 = 480 МБ — это размер свободной памяти. Теперь запускаем нашу игру и видим, что свободной памяти стало всего ~18 МБ. 480 — 18 = 462 МБ — столько ушло под виртуальную машину, которая запускает HTML5-приложения, и непосредственно под нашу игру. Это слишком много, а тормоза и зависания, скорее всего связаны с тем, что через некоторое время расходуется вся свободная память и начинает активно работать своп.

Теперь проблема ясна и уже можно приступать думать над тем, как оптимизировать игру.