Каковы недостатки использования Android: LargeHeap="True"?

Недавно я уменьшил максимальный пик памяти моего приложения со 100 МБ до 45 МБ, и мне любопытно, каковы недостатки использования android:largeHeap="true", кроме возможности вытолкнуть другие приложения из памяти? Если размер не вырастет настолько, чтобы оправдать вытеснение других приложений, разве это не будет хорошей отказоустойчивостью, например, если ваше приложение будет использоваться только в течение четырех дней на конвенции, где сбой будет потенциально катастрофическим? Или есть какой-то другой мошенник, который я смотрю мимо?

2 ответа

Решение

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

Как указывалось в этом учебном пособии,

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

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

1) Более длительное время сбора мусора:

Трудно измерить, сколько дополнительного времени потребуется для большей кучи. Потому что многое влияет на время сбора мусора. Время работы Android (Dalvik или ART) влияет на время сбора мусора (подробнее об этом можно узнать здесь). Также сборка мусора выполняется по-разному на разных версиях Android. Но это точно, что большая куча заставляет сборку мусора занимать больше времени. Потому что сборщик мусора в основном должен пройти весь ваш живой набор объектов. Если вам интересно, вы можете узнать больше об этой теме в разделе " Управление памятью для приложений Android" на Google I / O 2011 года. И, как отмечено на слайде сеанса, время приостановки сбора мусора составляет около 5 мс. Вы можете подумать, что несколько миллисекунд не имеют большого значения, но каждая миллисекунда считается. Android-устройство должно обновлять свой экран каждые 16 мс, и более длительное время GC может увеличить время обработки вашего кадра до 16-миллисекундного барьера, что может вызвать видимое зацепление.

2) Медленное переключение задач:

Как объяснено здесь,

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

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

Другие вопросы по тегам