2013-04-07 2 views
2

Я использую Galaxy Nexus (i9250) для разработки и тестирования. Я заметил странный факт - иногда, когда общий размер кучи составляет 64 МБ, а размер кучи составляет около 56-60 МБ, приложение падает. Но иногда я заметил, что даже память стреляет до 80 МБ, приложение не вылетает.Максимальный размер кучи для Nexus?

Первоначально я думал, что максимальный размер кучи для устройств диапазона nexus составит 64 МБ (теперь я понимаю, что это неправильно). Поэтому мой вопрос заключается в том, какой максимальный размер кучи может использовать устройство. Если он зависит от устройства, то зависит от того, какой размер кучи зависит от размера. Я знал, что это общий вопрос. Может ли кто-нибудь привести меня к правильному ответу. Заранее спасибо!

Примечание: Я не использовал LargeHeapSize = true; в моем коде

+4

Что вы делаете, что требует так много пространства кучи? –

+5

Я знаю, что это nitpicky, но я нахожу это невероятно раздражающим, когда люди не являются специфическими в отношении того, что им нужно для конкретного. Есть Nexus One, Nexus S, Galaxy Nexus, Nexus 4, Nexus 7 и Nexus 10. Вы сказали нам, что используете «Nexus», вы можете также сказать нам, что используете Android. Я предполагаю, что это 7 или 10, но cmon man ... –

+0

http://stackoverflow.com/questions/5350465/android-heap-size-on-different-phones-devices-and-os- версии – dongshengcn

ответ

0

не ясно, что устройство, которое вы точно говорите. Также неясно, как вы вычислили свою память кучи.

Я рекомендую вам рассчитать вашу память кучи и доступную память с помощью этой link

Но если ваше приложение использует родной памяти, их нет ограничений на этот link.

+0

Я использую nexus i9250 (галактика nexus). Я не вычислял размер кучи, а я говорю о размере кучи, показанного Eclipse (вы можете увидеть его в DDMS). –

0

Я использовал бы только значения DDMS в качестве руководства для поиска утечек памяти и проблем с распределением памяти, а не определенного количества, которое вы можете настроить. Ожидается, что любое приложение для Android будет работать на разных устройствах, поэтому, возможно, вы настроили свое приложение для «Galaxy Nexus», которое вы захотите запустить на старых устройствах и протестировать соответствующим образом. См. Комментарий @dongshengcn.

В дополнение к ссылкам на @minhaz я также читал бы: Understanding Heap Size.

Если вы пытаетесь лучше понять управление памятью на Android, тогда вы должны прочитать ответ Android Framework Engineer @ hackbod на: How to Discover Memory Usage of My Application in Android.

1

Учитывая, ваше приложение падает каждый раз, давая «OutOfMemoryError»

DVM начинается путем выделения небольшой кучи, после каждого цикла сбора мусора он проверяет для свободнога кучи и сравнивает его к общей памяти кучи и добавляет еще память в случае, если разница слишком мала. Таким образом, куча может быть увеличена или уменьшена во время выполнения согласно требованию Dalvik VM от ОС.

Так что, когда их достаточно памяти в системе приложение не получить разбился, когда память стреляет до 80MB. (Предполагается, что 64MB это не предел размера кучи)

Да, есть жесткое ограничение на размер кучи каждого устройства, которое может быть увеличено с помощью «LargeHeapSize = true», но это может быть слишком дорогостоящим с точки зрения производительности приложения, поскольку увеличенный размер кучи прямо пропорционален времени, затрачиваемому процессом сбора мусора (поскольку GC теперь должен пересекать больше объектов внутри большей кучи). Так что это большой «НЕТ, НЕТ», пока вы точно не узнаете, что и почему вы собираетесь увеличить размер кучи.

на какой фактор размера кучи зависит:

  • Heap размер в основном зависит от разрешения устройства вы с использованием, в качестве более разрешения требуется больше изображения/размера растровых изображений, чтобы соответствовать в.(больше пикселей = требуется больше памяти для включения)

  • Хотя, у меня не было никаких письменных доказательств этого. По моему понимание Размер кучи также зависит от размера ОЗУ. Так, больше
    размер RAM позволит более гибко многозадачности и меньшие
    шансы на получение «OutOfMemoryError»

В случае, если необходимо знать точное количество динамической памяти, вы можете использовать, ActivityManager .getMemoryClass(). Этот метод возвращает целое число, указывающее количество мегабайта, доступного для кучи вашего приложения

ActivityManager.getLargeMemoryClass() для увеличения размера кучи