Каков максимальный объем оперативной памяти, который может использовать приложение?


Мне очень любопытен этот вопрос, касающийся управление памятью операционной системы Android поэтому я надеюсь на довольно подробный ответ на эту тему.

Что я хотел бы знать:

  • что такое максимальный объем памяти (in мегабайт / as процент из общей оперативной памяти), что приложение для Android (это не системное приложение) может использовать?
  • есть ли различия между Android версии?
  • есть ли различия в отношении производитель устройства?

и главное:

  • , который "побочных факторов" учитывается / от чего это зависит когда речь заходит о системе, определяющей, сколько ОЗУ приложение может использовать во время выполнения (при условии, что Максимум памяти для каждого приложения не является статическим номер)?

то, что я слышал до сих пор (до 2013 года):

  • ранние устройства Android имели крышку для каждого приложения 16 МБ
  • позже эта крышка увеличилась до 24 Мб или 32 МБ

что делает меня очень любопытно:

оба этих предела очень низки.

Я только недавно скачал Диспетчер Задач Android чтобы проверить мои устройства ОЗУ. Что я заметил, что есть приложения, использующие около 40-50 мегабайт оперативной памяти, что очевидно больше, чем упомянутое максимальное использование ОЗУ, скажем, 32 МБ. Итак, как Android определяет, сколько оперативной памяти может использовать приложение? Как это возможно, что приложения превышают этот предел?

кроме того, я заметил, что некоторые приложения Mine crash (убиты системой?) с помощью OutOfMemoryException при использовании около 30-40 мегабайт. С другой стороны, у меня есть приложения, работающие на моем телефоне с помощью 100 МБ и еще через некоторое время (вероятно, из-за утечки памяти), которые не разбиваются или не убиваются. Так что это, очевидно, также зависит от самого приложения когда дело доходит до определения, сколько оперативной памяти можно сэкономить. Как такое возможно? (Я провел свои тесты с HTC One S с 768 МБ оперативной памяти)

заранее спасибо за ваши объяснения.

отказ от ответственности: я не связан с Android Task Manager app в любом случае.

2 116

2 ответа:

каков максимальный объем памяти (в мегабайтах / в процентах от общего объема оперативной памяти), который может использовать приложение Android (которое не является системным приложением)?

это зависит от устройства. getMemoryClass() on ActivityManager даст вам значение для устройства, на котором работает ваш код.

есть ли какие-либо различия между версиями Android?

да, поскольку требования к ОС увеличились за эти годы, и устройства должны подстраиваться под соответствие.

существуют ли различия, касающиеся производителя устройства?

да, поскольку производители производят устройства, а размер зависит от устройства.

какие "побочные факторы" принимаются во внимание, когда речь заходит об определении того, сколько оперативной памяти может использовать приложение?

Я понятия не имею, что означает "побочные факторы".

ранние устройства имели по-приложение крышка 16MB; более поздние устройства увеличили это до 24MB или 32MB

это правильно. Разрешение экрана является важным определяющим фактором, поскольку большие разрешения означают большие растровые изображения, и поэтому планшеты и телефоны с высоким разрешением будут иметь еще более высокие значения. Например, вы увидите устройства с 48 МБ кучи, и я не удивлюсь, если есть значения выше, чем это.

как это возможно, что приложения превышают этот предел?

вы предположим, что автор этого приложения знает, что он делает. Учитывая, что использование памяти приложения трудно для основного инженера Android, чтобы определить, Я бы не предположил, что приложение, о котором идет речь, обязательно обеспечивает особенно точные результаты.

при этом собственный код (NDK) не подпадает под ограничение кучи. И, начиная с Android 3.0, приложения могут запрашивать "большую кучу", обычно в диапазоне сотен МБ, но это считается плохой формой для большинства приложения.

кроме того, я заметил, что некоторые приложения моей аварии с OutOfMemoryException при использовании около 30-40 мегабайт.

имейте в виду, что сборщик мусора Android не является компактным сборщиком мусора. Исключение действительно должно быть CouldNotFindSufficientlyLargeBlockOfMemoryException, но это, вероятно, считалось слишком многословным. OutOfMemoryException означает, что вы не удалось выделить запрошенный блок, не то, чтобы вы исчерпали свою кучу полностью.

ограничения памяти для каждого приложения здесь в зависимости от размера экрана и версии Android: https://drive.google.com/file/d/0B7Vx1OvzrLa3Y0R0X1BZbUpicGc/view?usp=sharing

источник: Android совместимость загрузки http://source.android.com/compatibility/downloads.html; Документ определения совместимости (CDD), раздел совместимость виртуальных машин или совместимость во время выполнения