Использование памяти BlackBerry

Я ищу несколько советов по использованию памяти на мобильных устройствах, в частности, на BlackBerry. Используя некоторые инструменты профилирования, мы рассчитали размер рабочего набора в оперативной памяти 525 КБ. Проблема в том, что мы не знаем, является ли это приемлемым или слишком высоким?

Кто-нибудь может рассказать о собственном опыте использования памяти в BlackBerry? К какому числу мы должны стремиться?

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


person roryf    schedule 30.01.2009    source источник


Ответы (2)


512 КБ вполне приемлемо для текущего поколения устройств BlackBerry. Вы можете взглянуть на JBenchmark, чтобы увидеть точную кучу JVM, которую вы можете ожидать для каждой модели, но ни одна из текущие устройства имеют размер кучи ниже 20 МБ. Большинство из них намного больше.

В JBenchmark вы можете выбрать интересующее вас устройство из раскрывающегося списка в правой части страницы. Затем перейдите на вкладку JVM для устройства.

Когда дело доходит до сокращения использования памяти, я бы не стал беспокоиться об общем количестве байтов, используемых для этого приложения, если вы действительно используете 525 КБ, а только о том, как часто требуется выделение/перераспределение. Старайтесь как можно больше объединять/повторно использовать объекты, избегая ненужного распределения. Например, используйте класс StringBuffer для конкатенации строк вместо операторов, так как несколько объектов String будут создаваться для каждой конкатенации с использованием оператора, где StringBuffer просто помещает символы в массив и расширяется только при необходимости. Google — хороший способ найти больше советов.

Наконец, использование инструментов профилирования, которые есть в BlackBerry JDE, является очень важной частью понимания того, как именно вы можете оптимизировать использование динамической памяти.

person Fostah    schedule 30.01.2009
comment
Спасибо за полезные комментарии Фостах. Однако я хотел бы отметить одну вещь: во многих случаях компилятор превращает конкатенацию строк в StringBuffer. Я часто обнаруживал, что отладчик переходит к методу StringBuffer там, где в моем собственном коде не было ничего подобного. - person roryf; 30.01.2009
comment
Это интересно. Я все еще относительно новичок в платформе BlackBerry. Я потратил значительное количество времени на общее программирование J2ME, и вы не всегда видите эти полезные оптимизации от каждого производителя. - person Fostah; 30.01.2009
comment
Я не уверен, какой именно компилятор выполняет оптимизацию, у нас есть трехэтапный процесс сборки, в котором сначала используется WTK javac, затем ProGuard для обфускации и оптимизации, а затем компилятор rapc. Может быть любой из них, но я бы поставил на ProGuard или rapc. - person roryf; 31.01.2009
comment
О да, это имеет смысл, так как более новая версия ProGuard выполняет большую внутреннюю оптимизацию. - person Fostah; 01.02.2009
comment
Все компиляторы Java преобразуют серию конкатенаций строк в одном выражении в конкатенацию StringBuffer (StringBuilder, если нацелены на Java 5+). rapc от RIM зависит от javac вашего java SDK, поэтому это делается автоматически до того, как код попадет в компилятор BlackBerry. Конкатенация строк является проблемой только в том случае, если вы продолжаете добавлять к строке несколько операторов. Это всегда верно, например, в цикле, и именно поэтому вы должны быть осторожны при манипуляциях со строками в цикле. - person Michael Donohue; 08.04.2012

Если я не ошибаюсь, приложения Blackberry написаны на Java... это управляемая среда, а это означает, что единственный верный способ использовать меньше памяти — это создавать меньше объектов. Я думаю, что вы мало что можете сделать со своим рабочим набором, поскольку он управляется средой выполнения (что, вероятно, и является целью использования Java на таких устройствах).

person TheSmurf    schedule 30.01.2009