La section «Éviter les énumérations là où vous n'avez besoin que d'Ints» a été supprimée de la documentation officielle du développeur . (Voir Pourquoi Android n'utilise-t-il pas plus d'énumérations? Pour l'ancien contenu de la section)
Pourquoi? Y a-t-il eu un changement dans la VM Android qui a rendu le conseil obsolète?
Réponses:
la version originale de ce document n'était qu'un tas de préjugés. il a été réécrit pour ne contenir que des faits sauvegardés par des benchmarks réels, et il est mis à jour au fur et à mesure que la VM est mise à jour. vous pouvez trouver les différents benchmarks - ainsi que certains des benchmarks que nous utilisons pour optimiser les bibliothèques principales - à l' adresse http://code.google.com/p/dalvik/ .
la source
Un invité:
Ainsi, pour les exigences relativement banales d'une application GUI, les avantages des enums en termes de développement sur le temps dépassent largement le coût d'exécution supplémentaire.
la source
Elliott Hughes offre plus de détails sur la réécriture de la documentation sur son blog: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
La seconde moitié de l'article explique que chaque réclamation sur le document Performance est désormais étayée par des benchmarks. Les versions précédentes du document contenaient apparemment des affirmations non vérifiées, telles que «Évitez les énumérations car elles sont trop chères».
la source
La réponse d'Elliot Hugues en 2011 a déclaré que la raison initiale pour éviter l'énumération était pour des raisons de performance ... comme dans la "performance de traitement". Cette raison n'étant pas étayée par des faits, elle a été supprimée de la documentation officielle.
Il a été ajouté plus tard car les énumérations ajoutent beaucoup plus de données en mémoire que l'utilisation d'entiers.
la source
IntDef
annotations, qui permettent d'utiliser les constantes int en toute sécurité avec les erreurs et les avertissements d'Android Studio. blog.shamanland.com/2016/02/int-string-enum.htmlTLDR: Dalvik n'était pas bon avec l'allocation de mémoire et
Enum
utilise plus de mémoire queint
. Android Lollipop a remplacé Dalvik par ART qui ne souffre pas des mêmes limitations. Cette recommandation n'est donc plus pertinente.La réponse longue:
Hou la la! 8 ans, 5 réponses et de nombreux commentaires plus tard, la vraie raison n'est toujours pas abordée.
À l'époque d'Android pré-sucette, Dalvik était le processus VM utilisé. Comme une petite quantité de mémoire était disponible pour les applications à utiliser pendant cette période, Dalvik avait beaucoup de contraintes de mémoire. Pour l'allocation de mémoire, Dalvik a dû parcourir le tas et trouver de l'espace. Heap serait également fragmenté au fil du temps. Dalvik ne pouvait pas défragmenter, donc il allouerait au fil du temps et finirait par manquer d'espace.
vient de l'époque de Dalvik car un
Enum
est beaucoup plus gros qu'unint
et l'allocation de mémoire était très chère.Aujourd'hui, Dalvik a été remplacé par ART. ART est sorti dans KitKat et est par défaut depuis Lollipop.
ART a été créé dès le départ non pas pour optimiser la mémoire mais pour optimiser les performances. Il est également optimisé pour les allocations et les collections. La raison en est que la mémoire est réservée aux gros objets. Au lieu de tout mettre dans le même tas, puis de devoir trouver de l'espace pour les gros objets parmi tous les petits, ART met tous les gros objets et les bitmaps dans un tas séparé. Et puis les petits objets vont dans le tas séparé. En outre, il peut défragmenter.
Après ART, si vous utilisez
Enum
Android, ça ne fait rien et c'est pourquoi la recommandation a disparu maintenant.Cela vient de Chet Haase chez Google. Je recommande de trouver son discours Google I / O et de regarder toute la vidéo. Il contient de nombreuses informations utiles et un aperçu d'Android.
la source
C'est toujours mauvais pour les performances de la mémoire.
https://developer.android.com/training/articles/memory.html#Overhead
EDIT: Maintenant, il est supprimé. Coffre-fort à utiliser enums.
la source