Модель памяти, используемой MIDlet-ами

Как показывает жизнь, память - одно из самых слабых мест мобильных устройств. Надо сказать, в последнее время ситуация несколько улучшилась, и на рынке все чаще появляются устройства с приличным объемом памяти. Тем не менее, полезно знать, какие виды памяти используются в MIDP устройствах и какое влияние они оказывают на процесс разработки мидлета.

Всего в MIDP поддерживается три вида памяти: Program Memory, Heap и Persistent Storage. Рассмотрим их более подробно.

Program Memory (Программная память)

Когда Вы устанавливаете MIDlet, он занимает программную память на вашем устройстве. MIDlet-ы распространяются в виде JAR файлов. Обычно размер именно этого файла принимают за размер MIDlet-а. Некоторые разработчики ограничивают размер JAR, который можно установить на их устройство. Например, приложение iDEN Update от Motorola позволяет загружать на телефон MIDlet, размер которого не превышает 50 kB; а заявленное ограничение для Nokia 3410 составляет 30 kB.

Размер программной памяти, используемой приложением, может значительно отличаться от размера JAR файла, поскольку при установке на устройство, JAR архив обычно преобразуется к внутреннему формату устройства. Многие устройства позволяют узнать, сколько памяти фактически используется MIDlet-ом.

Для достижения переносимости программы на различные устройства следует стремиться к минимизации размера мидлета. В этом Вам может сильно помочь утилита, получившая название obfuscator. Она позволяет удалить из мидлета неиспользуемые классы и методы; переименовывает методы и переменные.

Также следует минимизировать размер ресурсов. Если Вы используете Wireless Toolkit, то файлы ресурсов (например картинки) находятся в папке res вашего проекта. Очевидно, вы должны использовать как можно меньше изображений в своей программе. Также Вы можете уменьшить размер изображений, сократив число цветов в их палитре.

The Heap (Динамическая память)

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

В среде выполнения J2SE размер динамической памяти составляет несколько мегабайт. Конечно, возможности мобильных устройств намного скромнее. Например, в реализации MIDP для PalmOS размер динамической памяти составляет всего 20 kB.

Чтобы узнать общий размер динамической памяти и размер доступный приложению, воспользуйтесь методами totalMemory() и freeMemory() класса java.lang.Runtime. Заметьте, что система запуска может использовать эту память для своих нужд, то есть фактически вам доступно даже меньший объем, чем возвращается методом freeMemory().

Вот несколько рекомендаций, следуя которым Вы сможете уменьшить размер используемой вашим приложением динамической памяти.

  • Используйте как можно меньше объектов.
  • Удаляйте не используемые объекты. То есть, как можно раньше устанавливайте ссылку на них в null.
  • Отслеживайте ошибку OutOfMemoryErrors. Не позволяйте ей застать Вас врасплох. Аккуратное сообщение от вашего MIDlet-a будет выглядеть не так неуклюже, как выводимое по умолчанию системой.

Persistent Storage (Постоянная память)

Этот вид памяти используется для хранения различных записей (например введенных вами телефонов, или таблицы рекордов в игре). В MIDP для долговременного хранения данных используется механизм Record Management System (RMS), который фактически является очень сильно урезанной базой данных. Работа с записями базы (хранилища) осуществляется посредствам класса javax.microedition.rms.RecordStore.

Минимально в MIDP под постоянную память отводится 8 kB. В зависимости от конкретного устройства это число может возрастать. При разработке MIDlet-а вы должны позаботиться о том, чтобы лимит постоянной памяти не превышался.

Для создания новой записи необходимо сначала методом openRecordStore() открыть хранилище, а затем методом addRecord() добавить новую запись. Позаботьтесь также о том, чтобы Ваше приложение отслеживало ошибку RecordStoreFullException.

Метод getSizeAvailable() выдает число байт, на которое может вырасти хранилище записей, а метод size() - текущий размер хранилища записей.

Резюме

Мы рассмотрели три вида памяти, используемых мидлетом. Необходимо стремиться к разработке как можно более экономичного мидлета.

В основе статьи лежат работыJonathan Knudsen.
Перевод: aRix




Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна