Размер кучи Android на разных телефонах/устройствах и версиях ОС

Кто-нибудь знает, является ли размер кучи на телефонах Android постоянным значением в соответствии с тем, что установлено в версии ОС, или если это параметр, который могут выбрать производители телефонов?

Является ли размер кучи пропорциональным количеству ОЗУ на телефоне?

Я только нашел статьи, где люди говорят, что размер кучи приложения составляет 16 М. Однако эти статьи немного устарели. Из того, что я вижу, в качестве примера, размеры кучи варьируются от 20 М до 24 М на одной конкретной модели. Этот телефон имеет 768M оперативной памяти.

Ответы

Ответ 1

Кто-нибудь знает, является ли размер кучи на телефонах Android постоянным значением в соответствии с тем, что установлено в версии ОС, или если это параметр, который могут выбрать производители телефонов?

Технически это настройка, которую могут решить производители телефонов. Android - с открытым исходным кодом. Я не помню, что документ определения совместимости, определяющий требования к размеру кучи, хотя я не смотрел недавно.

Является ли размер кучи пропорциональным количеству ОЗУ на телефоне?

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

Я только нашел статьи, где люди говорят, что размер кучи приложения составляет 16 М.

Поиск StackOverflow на [android] "heap size" вызывает этот ответ.

Ответ 2

Дополнительная информация об устройстве, извлеченная из файлов build.prop(adb -d pull/system/build.prop):

Телефоны (версия Android):

  • HTC Wildfire (2.2.1) = 16MB
  • HTC Wildfire S (2.3.5) = 20MB
  • HTC Salsa (2.3.3) = 20MB
  • HTC Desire (2.3.3) = 32MB
  • HTC Desire S (2.3.5) = 32MB
  • Sprd - Richview - S111 (2.3.5) = 32MB
  • Samsung Galaxy S GT-I9000 (2.2) = 48 МБ
  • Samsung Galaxy R GT-I9103 (2.3.5) = 64MB
  • Samsung Galaxy Y GT-S5360 (2.3.5) = 64MB
  • Samsung Galaxy Note N7000 (4.1.2) = heapstartsize = 8m, heapgrowthlimit = 64m, heapsize = 256m
  • Samsung Galaxy S3 GT-I9300 (4.3, xhpdi) = 8/64/256MB
  • Samsung Galaxy S4 GT-I9505 (4.4, xxhpdi) = 8/128/512MB
  • Google Galaxy Nexus (4.3) = 8/96/256MB
  • Google Nexus 4 (4.4, xhdpi) = 8/192/512MB
  • Google Nexus 5 (4.4, xxhdpi) = 8/192/512MB
  • Samsung Galaxy S6 SM-G920W8 (7.0) = 8/256/512MB

Таблетки (версия Android):

  • Samsung Galaxy Tab GT-P1000 (2.2) = 48 МБ
  • Samsung Galaxy Tab 8.9 GT-P7300 (3.2) = 5/64/288MB
  • Samsung Galaxy Tab 10.1 GT-P7500 (3.2) = 5/64/288MB
  • Samsung Galaxy Tab 3 10.1 GT-P5200 (4.2, mdpi) = 8/96/256MB
  • Acer Iconia A500 (3.2.1) = 5/48/256MB
  • Kindle Fire HD 7 "(4.0.3) = 5/48/256MB
  • Asus Transformer Prime TF201 (4.1.1) = 5/48/256MB
  • Nexus 10 (4.4.3) 16/192/512 МБ

Ответ 3

Не только производители телефонов, но и все, кто создает версию ОС Android, могут указывать максимально допустимый размер кучи на основе конкретных требований своих устройств. Некоторые корни Android, такие как CyanogenMod, даже позволяют пользователю самостоятельно выбирать размер кучи в качестве параметра.

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

Runtime.getRuntime().maxMemory();

Дополнительная информация по этой теме доступна здесь.

Если вашему приложению обычно требуется более 16 МБ кучи, предлагаемый подход заключается в том, чтобы установить минимальный уровень версии ОС в вашем манифесте, который гарантирует, что подавляющее большинство тех, кто загружает ваше приложение, будет иметь как минимум необходимую сумму, а затем найдите способ изящно деградировать свои функции таким образом, чтобы снизить требования к куче по мере необходимости, вплоть до базового уровня 16 МБ, для небольшого числа пользователей с меньшим, чем ваше оптимальное количество кучи, которые проваливаются через это сито.

Вот некоторые цифры, показывающие связь ОЗУ телефона с версией ОС (на основе текущей, а не оригинальной ОС). Я считаю, что у телефона, имеющего как минимум 1 ГБ оперативной памяти, почти всегда будет больше 16 МБ кучи. Обратите внимание, что здесь проценты для количества моделей телефонов, поддерживающих указанную память, а не для общего количества используемых телефонов, которые могут быть сильно искажены по отношению к определенным моделям. Эти цифры были получены путем подключения входных данных к следующему телефонному поисковому устройству (который включает в себя 1500 моделей телефонов Android) и поэтому являются только приблизительными цифрами: http://www.gsmarena.com/search.php3

Процент моделей телефонов, имеющих не менее 1 ГБ ОЗУ, по текущей версии ОС (не версия при запуске):

Phones running         Percent of models having at least 1GB of RAM   Percentage of all models
4.4 and up             100 percent                                    1.5
4.3 and up             100 percent                                    2.9
4.2.x and up           74 percent                                     18.7
4.1.x and up           71 percent                                     37
4.0 and up             62 percent                                     60
2.3.x and up           57 percent                                     71
2.2 and up             44 percent                                     93
2.1 and up             44 percent                                     97
ALL OS VERSIONS:       41.5 percent                                   100

Ответ 4

"Бюджет VM", который разрешено использовать приложениям, варьируется от устройства к устройству. Таблетки обычно позволяют увеличить бюджет, чем телефоны.

Вот некоторые размеры бюджета VM, которые я нашел для различных устройств.

  • G1 = 16 МБ
  • Droid = 24 МБ
  • Nexus One = 32 МБ
  • Xoom = 48 МБ
  • GalaxyTab = 64 Мб.

(Примечание: если вы нашли по-другому, дайте мне знать)

Ответ 5

Вы должны иметь возможность проверить max vm heapsize, используя:

getprop dalvik.vm.heapsize

на терминале Android (соединительный модуль или оболочка adb и т.д.). Можно перемонтировать read-write и установить размер кучи в файле build.prop. (Убедитесь, что у вас установлено восстановление, поэтому вы можете повторно установить его, если вы случайно сделаете его слишком маленьким, он не загрузится).

Ответ 6

На самом деле существует определенная минимальная память приложения, которая зависит от размера экрана и плотности:

Мобильные устройства обычно имеют ограниченные системные ресурсы. Android устройства могут иметь всего 16 МБ памяти для одного выражение. Документ определения совместимости Android (CDD), Раздел 3.7. Совместимость виртуальной машины дает необходимый минимум память приложений для различных размеров экрана и плотности. Приложения должны быть оптимизированы для работы в этой минимальной памяти предел. Однако имейте в виду, что многие устройства настроены с более высоким пределы.

Цитата из: http://developer.android.com/training/displaying-bitmaps/index.html

Но, как утверждают другие, каждый производитель устройства решает фактическое значение для устройства, поэтому он может быть больше этого (но не меньше).

В упомянутом документе определения совместимости (CDD) перечислены минимальные требования для каждой версии android: https://source.android.com/compatibility/cdd.html

Для последней версии Android существует доступная версия html verison, и мы можем напрямую ссылаться на раздел памяти во время работы: https://source.android.com/compatibility/android-cdd.html#3_7_runtime_compatibility

Для Android 2.3:

Реализации устройств с экранами, классифицированными как средние или низкая плотность ДОЛЖНА настроить Dalvik на размещение не менее 16 МБ памятидля каждого приложения. Реализации устройств с экранами, классифицированными как высокая плотность или сверхвысокая плотность ДОЛЖНЫ настраивать Dalvik для распределения не менее 24 МБ памяти для каждого приложения. Обратите внимание, что устройство реализации МОГУТ выделять больше памяти, чем эти цифры.

Для современных версий вместо таблицы есть таблица, где она зависит от плотности экрана и т.д.:

Для Android 4.2, пример строки из этой таблицы:

малый/нормальный/большой размер и плотность xhdpi: 64 МБ

Для Android 6 извлеките:

small/normal xhdpi: 80MB

small/normal xxhdpi: 128 МБ

small/normal xxxhdpi: 256 МБ

В этих документах есть таблица для других версий Android 2.x, 4.x, 5.x и 6 (см. ссылку CDD выше).

Обратитесь к этой ссылке google, чтобы легко находить плотность экрана и т.д. для определенных устройств: https://design.google.com/devices/

Ответ 7

Эти данные работают на меня. Выберите эмулятор Tablet Android TV RAM 1536MB VM HEAP 16MB Внутреннее хранилище 800 МБ Студия, управляемая 100