Из развертываний в дикой природе, я нашел следующие устройства:
- Устройства, ограничивающие до 16 МБ кучи Java (растровые изображения практически не ограничены).
- Устройства с ограничением до 16 МБ (кучи Java + хранилище собственных растровых изображений)
- Устройства, ограничивающие до 24 МБ кучи Java (растровые изображения практически не ограничены).
- Устройства с ограничением до 24 МБ (кучи Java + хранилище собственных растровых изображений)
24 МБ, как правило, являются устройствами с высоким разрешением и могут быть обнаружены с помощью Runtime.getRuntime (). MaxMemory (). Сейчас также есть устройства 32 МБ, а некоторые из рутированных телефонов по умолчанию имеют 64 МБ. Раньше я несколько раз путала себя, пытаясь понять, что происходит. Я думаю, что все устройства считают битовые карты в пределе кучи. Но крайне сложно сделать какие-либо обширные обобщения о флоте андроидов.
Это ОЧЕНЬ неприятная проблема на Android и очень запутанная. Этот предел и его поведение плохо документированы, сложны и крайне неинтуитивны. Они также различаются в зависимости от устройства и версии ОС и имеют несколько известных ошибок. Частично проблема заключается в том, что ограничения не точны - из-за фрагментации кучи вы попадете в OOM задолго до фактического ограничения и должны консервативно покинуть мегабайт или два буфера. Хуже того, у меня есть несколько устройств, в которых есть собственный segfault (ошибка на 100% в самом Android), который происходит до того, как вы получите исключение java OOM, что делает вдвойне важным никогда не достигать предела, так как вы даже не можете поймать родная авария. Для более подробной информации о моих расследованиях, проверьте этот пост . В том же посте я объясняю, как измерить использование по сравнению с лимитом и избежать сбоев.
Размер кучи Java - Runtime.getRuntime (). TotalMemory ().
Нет простого способа измерить размер собственного растрового хранилища. Общая собственная куча может быть измерена с помощью Debug.getNativeHeapAllocatedSize (), но только растровые изображения учитываются до предела (я думаю).