Вот «нормальные» (см. Ниже) размеры кучи для некоторых конкретных устройств:
- G1: 16 МБ
- Moto Droid: 24 МБ
- Nexus One: 32 МБ
- Viewsonic GTab: 32 МБ
- Novo7 Паладин: 60 МБ
Я говорю «нормально», потому что некоторые версии Android (например, CyanogenMod) позволяют пользователю вручную регулировать ограничение кучи. Результат может быть больше или меньше «нормальных» значений.
См. Этот ответ для получения дополнительной информации, в том числе о том, как узнать, каков размер кучи на самом деле программно, а также о том, как различать предел абсолютного размера кучи, с одной стороны, и предел кучи, который в идеале следует соблюдать, - другой:
Определение размера кучи приложения в Android
Чтобы определить текущее использование кучи, вы можете попробовать использовать метод totalMemory () класса Runtime. Тем не менее, я читал сообщения о том, что разные версии / реализации ОС Android могут иметь разные политики в отношении того, учитывается ли собственная память (из которой выделяется резервная память для растровых изображений) в максимуме кучи или нет. И, начиная с версии 3.0, собственная память берется непосредственно из кучи приложения.
Неудобность этого расчета заставляет меня думать, что было бы ошибкой отслеживать использование памяти вашим приложением во время выполнения, постоянно сравнивая его с доступным количеством. Кроме того, если вы находитесь в середине участвующих вычислений и обнаруживаете, что у вас заканчивается память, отменить это вычисление не всегда удобно или разумно, и это может привести к плохим результатам для ваших пользователей, если вы это сделаете.
Вместо этого вы можете попытаться превентивно определить определенные режимы или ограничения для функционального поведения вашего приложения, которое будет гарантировать, что оно будет соответствовать любым ограничениям кучи вашего текущего устройства (как обнаружено во время инициализации вашего приложения).
Например, если у вас есть приложение, которое использует большой список слов, которые должны быть загружены в память одновременно, вы можете ограничить свое приложение таким образом, чтобы при меньших размерах кучи ограничивался только меньший список наиболее распространенных слов быть загруженным, в то время как для больших пределов кучи может быть загружен полный список, содержащий намного больше слов.
Существуют также методы программирования Java, которые позволяют объявлять определенную память утилизируемой сборщиком мусора по требованию, даже если она имеет «мягкие» (а не жесткие) ссылки. Если у вас есть данные, которые вы хотели бы сохранить в памяти, но которые при необходимости могут быть перезагружены из энергонезависимого хранилища (например, из кэша), вы можете рассмотреть возможность использования программных ссылок для автоматического освобождения такой памяти, когда ваше приложение начинает сталкиваться с верхними границами вашей кучи. См. Эту страницу для получения информации о мягких ссылках в Android:
http://developer.android.com/reference/java/lang/ref/SoftReference.html