TLDR: Dalvik плохо справился с распределением памяти и Enum
использует больше памяти, чем int
. Android Lollipop заменил Dalvik на ART, который не страдает от тех же ограничений. Таким образом, эта рекомендация больше не актуальна.
Длинный ответ:
Вот Это Да! 8 лет, 5 ответов и много комментариев спустя настоящая причина до сих пор не устранена.
В дни Android, предшествующие леденцу на палочке, Dalvik был тем процессом, который использовала VM. Поскольку в то время приложениям было доступно небольшое количество памяти, у Дальвика было много ограничений по памяти. Для выделения памяти Далвику пришлось пройти кучу и найти место. Куча также со временем будет фрагментирована. Dalvik не может дефрагментировать, поэтому он будет распределяться с течением времени и в конечном итоге не хватит места.
Избегайте Enums, где вам нужны только Ints
приходит из далвикских дней, потому что Enum
намного больше, чемint
и распределение памяти было очень дорого.
Вскоре, Dalvik был заменен на ART. ART вышел в KitKat и по умолчанию с Lollipop.
ART был создан с нуля не для оптимизации памяти, а для оптимизации производительности. Он также оптимизирован для распределений и сборов. Причина в том, что у него выделена память для больших объектов. Вместо того, чтобы помещать все в одну кучу, а затем находить место для больших объектов среди всех крошечных, ART помещает все большие объекты и растровые изображения в отдельную кучу. И тогда мелкие предметы уходят в отдельную кучу. Также это может дефрагментировать.
После АРТ, если вы используете Enum
Android, это не волнует, и именно поэтому рекомендации сейчас нет.
Это от Чета Хаазе из Google. Я рекомендую найти его разговор Google I / O и смотреть все видео. Он содержит много полезной информации и понимания Android.