Раздел «Избегайте перечислений, где вам нужны только целые числа» был удален из официальной документации разработчика . (См. Почему Android не использует больше перечислений? Для старого содержимого раздела)
Зачем? Было ли изменение в виртуальной машине Android, которое сделало совет устаревшим?
Ответы:
оригинальная версия этого документа была просто кучей предрассудков. он был переписан, чтобы содержать только факты, подкрепленные фактическими тестами, и он обновляется по мере обновления виртуальной машины. Вы можете найти различные тесты, а также некоторые тесты, которые мы используем для оптимизации основных библиотек, по адресу http://code.google.com/p/dalvik/ .
источник
Догадка:
Таким образом, для сравнительно обыденных требований приложения с графическим интерфейсом преимущества перечислений во время разработки намного превышают дополнительные затраты времени выполнения.
источник
Эллиот Хьюз предлагает более подробную информацию о переписывании документации в своем блоге: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
Во второй половине поста объясняется, что каждое утверждение в документе Performance теперь подкреплено тестами. Предыдущие версии документа, очевидно, содержали непроверенные утверждения, такие как «Избегайте перечислений, потому что они слишком дороги».
источник
В ответе Elliot Hugues за 2011 год говорилось, что первоначальная причина избегать enum была по причине производительности ... как в "производительности обработки". Поскольку эта причина не была подкреплена фактом, она была удалена из официальной документации.
Это было добавлено позже, потому что перечисления добавляют намного больше данных в память, чем использование целого числа.
источник
IntDef
аннотации, которые позволяют безопасно использовать int-константы с ошибками и предупреждениями Android Studio. blog.shamanland.com/2016/02/int-string-enum.htmlTLDR: Dalvik плохо справился с распределением памяти и
Enum
использует больше памяти, чемint
. Android Lollipop заменил Dalvik на ART, который не страдает от тех же ограничений. Таким образом, эта рекомендация больше не актуальна.Длинный ответ:
Вот Это Да! 8 лет, 5 ответов и много комментариев спустя настоящая причина до сих пор не устранена.
В дни Android, предшествующие леденцу на палочке, Dalvik был тем процессом, который использовала VM. Поскольку в то время приложениям было доступно небольшое количество памяти, у Дальвика было много ограничений по памяти. Для выделения памяти Далвику пришлось пройти кучу и найти место. Куча также со временем будет фрагментирована. Dalvik не может дефрагментировать, поэтому он будет распределяться с течением времени и в конечном итоге не хватит места.
приходит из далвикских дней, потому что
Enum
намного больше, чемint
и распределение памяти было очень дорого.Вскоре, Dalvik был заменен на ART. ART вышел в KitKat и по умолчанию с Lollipop.
ART был создан с нуля не для оптимизации памяти, а для оптимизации производительности. Он также оптимизирован для распределений и сборов. Причина в том, что у него выделена память для больших объектов. Вместо того, чтобы помещать все в одну кучу, а затем находить место для больших объектов среди всех крошечных, ART помещает все большие объекты и растровые изображения в отдельную кучу. И тогда мелкие предметы уходят в отдельную кучу. Также это может дефрагментировать.
После АРТ, если вы используете
Enum
Android, это не волнует, и именно поэтому рекомендации сейчас нет.Это от Чета Хаазе из Google. Я рекомендую найти его разговор Google I / O и смотреть все видео. Он содержит много полезной информации и понимания Android.
источник
Это все еще плохо для производительности памяти.
https://developer.android.com/training/articles/memory.html#Overhead
РЕДАКТИРОВАТЬ: Теперь это удалено. Безопасно использовать перечисления.
источник