2016-03-01 2 views
2

Я разработал игру с libgdx. Я попытался максимально снизить потребление памяти, выполнив следующие действия:Очень высокий «Максимальное использование памяти» для игры libgdx

  1. По возможности используйте Pooling.
  2. Limit SpriteBatch «s size

Когда я запускаю игру на свой телефон (Nexus 5x) от Android Studio, моя игра проходит гладко, и кажется, что потребление памяти действительно разумно: потребление памяти, как правило, под 23MB (Я вижу это через memory monitor). Однако, когда я иду на вкладку памяти на телефоне (Настройки -> Память -> Память, используемая приложениями) я вижу следующее: enter image description here

шокирующим «Максимальное использование памяти» 1.2 GB для моя игра. Способ выше любого другого приложения.

Мой вопрос (ы):

  • Что это число означает? Означает ли это, что в какой-то момент моя игра заняла 1,2 ГБ оперативной памяти?
  • Как это может быть, если монитор памяти никогда не показывал потребление более 25 МБ?
  • Увидеть, что игра проходит гладко, если я попытаюсь получить это число? Если да, как я могу это сделать?

ответ

2

Вы путаете родную память (RAM, как показано на скриншоте) и VM память.

В мониторе памяти вы видите только кучу (так что память, выделенная для виртуальной машины, на которой работает ваше приложение), но не фактическая оперативная память. Этот максимальный размер кучи ограничен системой (см., Например, https://stackoverflow.com/a/9940415/1096567).

Libgdx использует OpenGL через JNI и поэтому также использует ОЗУ непосредственно.

Исследовать ваше использование оперативной памяти в целом вам нужны другие инструменты, чем монитор памяти, см .: например How do I discover memory usage of my application in Android?

Я не знаю, ваше приложение, но 1.2GB кажется немного высока. Если вы не используете Texture Atlases & the Texture Packer, это, вероятно, хорошее место для начала оптимизации. Также обязательно удалите все Disposables (например, BitmapFont). Here is a detailed list.

+0

Благодарим за разъяснение различия между встроенной памятью и памятью VM! Это меня действительно сбивало с толку. Я уже использую Textures Atlases, и моя игра не так богата графикой. У меня есть 5 текстурных атласов, которые, по словам Упаковщика текстур, которые я использую, будут занимать около 12 МБ общей суммы ОЗУ (для всех 5). Что я буду проверять, так это то, что я несколько раз создаю некоторые из тех же самых текстурных атласов. Есть что-нибудь еще, что я должен проверить? – asherbar

+0

@ user2016436 Я не libgdx-pro, но вы должны проверить, все ли вы располагаете: https://github.com/libgdx/libgdx/wiki/Memory-management. Я также недостаточно знаю о вашем приложении, чтобы узнать ваши горячие точки памяти. Вы должны прокомментировать это самостоятельно. – Lovis

Смежные вопросы