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

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

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

  • Каков максимальный объем памятимегабайтах / в процентах от общей ОЗУ), который может использовать приложение Android (это не системное приложение)?
  • Существуют ли различия между версиями Android ?
  • Существуют ли какие-либо отличия в отношении производителя устройства?

И самое важное:

  • Какие «побочные факторы» учитываются / что зависит от того, когда дело доходит до системы, определяющей, сколько оперативной памяти приложение может использовать во время выполнения (при условии, что максимальный объем памяти для каждого приложения не является статическим числом)?

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

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

Мне очень любопытно:

Оба эти ограничения очень низкие.

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

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

Заранее благодарю за ваше объяснение.

Отказ от ответственности: я НЕ являюсь членом приложения Android Task Manager.

Solutions Collecting From Web of "Каков максимальный объем оперативной памяти, которую приложение может использовать?"

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

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

Существуют ли различия между версиями Android?

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

Существуют ли различия в отношении производителя устройства?

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

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

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

У ранних устройств была кеп-кеп на 16 МБ; Более поздние устройства увеличили это до 24 МБ или 32 МБ

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

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

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

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

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

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

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

Источник: Android Compatibility Downloads http://source.android.com/compatibility/downloads.html ; Документ определения совместимости (CDD), раздел «Совместимость виртуальной машины» или совместимость с Runtime

Этот ответ углубляется в поведение методов getMemoryClass() и maxMemory() .