La sección "Evitar enumeraciones donde solo necesita" se eliminó de la documentación oficial del desarrollador . (Consulte ¿Por qué Android no usa más enumeraciones? Para el contenido de la sección anterior)
¿Por qué? ¿Hubo un cambio en la máquina virtual de Android que hizo que la punta quedara obsoleta?
Respuestas:
La versión original de ese documento era solo un montón de prejuicios. se ha reescrito para contener solo hechos respaldados por puntos de referencia reales, y se actualiza a medida que se actualiza la VM. Puede encontrar los diversos puntos de referencia, además de algunos de los puntos de referencia que utilizamos para optimizar las bibliotecas principales, en http://code.google.com/p/dalvik/ .
fuente
Una adivinanza:
Por lo tanto, para los requisitos comparativamente mundanos de una aplicación GUI, los beneficios en tiempo de desarrollo de las enumeraciones superan con creces el costo de tiempo de ejecución adicional.
fuente
Elliott Hughes ofrece más detalles sobre la reescritura de documentación en su blog: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
La segunda mitad de la publicación explica que cada reclamo en el documento Performance ahora está respaldado con puntos de referencia. Las versiones anteriores del documento aparentemente contenían afirmaciones no verificadas, como "Evita enumeraciones porque son demasiado caras".
fuente
La respuesta de 2011 de Elliot Hugues dijo que la razón original para evitar la enumeración era por razones de rendimiento ... como en "procesamiento de rendimiento". Como esta razón no estaba respaldada por hechos, se eliminó de la documentación oficial.
Se ha agregado más adelante porque las enumeraciones agregan muchos más datos en la memoria que el uso de enteros.
fuente
IntDef
anotaciones, que permiten usar constantes int de forma segura con los errores y advertencias de Android Studio. blog.shamanland.com/2016/02/int-string-enum.htmlTLDR: Dalvik no era bueno con la asignación de memoria y
Enum
usa más memoria queint
. Android Lollipop reemplazó a Dalvik con ART, que no sufre las mismas limitaciones. Por lo tanto, esta recomendación ya no es relevante.La respuesta larga:
¡Guauu! 8 años, 5 respuestas y muchos comentarios después, la verdadera razón aún no se aborda.
En los días de Android previos a la piruleta, Dalvik era el proceso que usaba VM. Como había una pequeña cantidad de memoria disponible para que las aplicaciones la usaran durante ese tiempo, Dalvik tenía muchas restricciones de memoria. Para la asignación de memoria, Dalvik tuvo que recorrer el montón y encontrar espacio. El montón también se fragmentaría con el tiempo. Dalvik no pudo desfragmentar, por lo que se asignaría con el tiempo y, finalmente, se quedaría sin espacio.
proviene de los días de Dalvik porque una
Enum
es mucho más grande que unaint
y la asignación de memoria era muy costosa.Avance rápido hoy, Dalvik ha sido reemplazado por ART. ART salió en KitKat y es predeterminado desde Lollipop.
ART fue creado desde cero no para optimizar la memoria sino para optimizar el rendimiento. También está optimizado para asignaciones y colecciones. La razón es que tiene memoria reservada para objetos grandes. En lugar de poner todo en el mismo montón, y luego tener que encontrar espacio para objetos grandes en medio de todos los pequeños, ART coloca todos los objetos grandes y mapas de bits en un montón separado. Y luego los objetos pequeños van en el montón separado. También se puede desfragmentar.
Después de ART, si usa
Enum
Android no le importa y es por eso que la recomendación ya no existe.Esto viene de Chet Haase en Google. Recomiendo encontrar su charla de E / S de Google y ver el video completo. Contiene mucha información útil e información sobre Android.
fuente
Todavía es malo para el rendimiento de la memoria.
https://developer.android.com/training/articles/memory.html#Overhead
EDITAR: ahora se elimina. Seguro de usar enumeraciones.
fuente