JavaME - Изображения LWUIT съедают всю память

С точки зрения инженера по контролю качества диаграммы UML указывают на потенциальные дефекты в логике и мысли. Делает мое задание легче:)

6
задан skaffman 5 September 2010 в 21:35
поделиться

3 ответа

Вы подумали о том, что, возможно, загрузка одного и того же изображения из JAR много раз приводит к созданию множества отдельных объектов изображения (с идентичным содержимым) вместо повторного использования одного экземпляра для каждого- индивидуальный образ? Это мое первое предположение.

0
ответ дан 17 December 2019 в 04:49
поделиться

Здесь может происходить несколько вещей:

  • Вы могли видеть, что память использовалась до сборки мусора, что не соответствует фактическая память, используемая вашим приложением.
  • Какой-то сторонний код, который вы используете, может объединять некоторые внутренние структуры данных для минимизации распределения. Хотя объединение в пул является жизнеспособной стратегией, иногда это действительно похоже на утечку. В этом случае посмотрите, есть ли API для «закрытия» или «удаления» ненужных вам объектов.
  • Наконец, у вас действительно может быть утечка. В этом случае вам нужно получить более подробную информацию о том, что происходит в виртуальной машине эмулятора (хотя имейте в виду, что это не обязательно то же самое, что и виртуальная машина телефона).

Убедитесь, что ваш эмулятор использует JRE 1.6 в качестве поддержки JVM. Если вам нужно использовать библиотеки времени выполнения из erlyer JDK, используйте -Xbootclasspath: .

Затем, когда ваше приложение перейдет в желаемое состояние, выполните % JAVA_HOME% \ bin \ jmap -dump: format = b, file = heap.bin (если вы не знаете идентификатор вашего процесса, используйте jps )

Теперь у вас есть дамп кучи JVM. Вы можете проанализировать его с помощью jhat (поставляется с JDK, немного сложнее в использовании) или некоторых сторонних профилировщиков (я предпочитаю YourKit - это коммерческий, но у них ограниченный по времени eval (лицензии))

1
ответ дан 17 December 2019 в 04:49
поделиться

У меня была аналогичная проблема с LWUIT на Java DTV. Вы пытались очистить изображения, когда они больше не нужны (getAWTImage (). Flush ())?

1
ответ дан 17 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: