Der Abschnitt "Vermeiden Sie Aufzählungen, bei denen Sie nur Ints benötigen" wurde aus der offiziellen Entwicklerdokumentation entfernt . (Siehe Warum verwendet Android nicht mehr Aufzählungen? Für den Inhalt des alten Abschnitts)
Warum? Gab es eine Änderung in der Android-VM, die den Tipp überflüssig machte?
Antworten:
Die Originalversion dieses Dokuments war nur eine Reihe von Vorurteilen. Es wurde so umgeschrieben, dass es nur Fakten enthält, die durch tatsächliche Benchmarks gesichert sind, und es wird aktualisiert, wenn die VM aktualisiert wird. Die verschiedenen Benchmarks sowie einige der Benchmarks, mit denen wir die Kernbibliotheken optimieren, finden Sie unter http://code.google.com/p/dalvik/ .
quelle
Eine Annahme:
Für die vergleichsweise alltäglichen Anforderungen einer GUI-App überwiegen die Vorteile von Aufzählungen für die Entwicklungszeit bei weitem die zusätzlichen Laufzeitkosten.
quelle
Elliott Hughes bietet in seinem Blog weitere Informationen zum Umschreiben der Dokumentation: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
In der zweiten Hälfte des Beitrags wird erläutert, dass jeder Anspruch auf das Leistungsdokument jetzt mit Benchmarks gesichert wird. Frühere Versionen des Dokuments enthielten offenbar nicht überprüfte Behauptungen wie "Vermeiden Sie Aufzählungen, weil sie zu teuer sind."
quelle
In der Antwort von Elliot Hugues aus dem Jahr 2011 heißt es, dass der ursprüngliche Grund für die Vermeidung von Aufzählungen der Leistungsgrund war ... wie bei "Verarbeitungsleistung". Da dieser Grund nicht durch Tatsachen gestützt wurde, wurde er aus der offiziellen Dokumentation entfernt.
Es wurde später hinzugefügt, da Aufzählungen viel mehr Daten im Speicher hinzufügen als Ganzzahlen.
quelle
IntDef
Anmerkungen eingeführt , mit denen int-Konstanten sicher mit den Fehlern und Warnungen von Android Studio verwendet werden können. blog.shamanland.com/2016/02/int-string-enum.htmlTLDR: Dalvik war nicht gut mit Speicherzuweisung und
Enum
verwendet mehr Speicher alsint
. Android Lollipop ersetzte Dalvik durch ART, das nicht unter den gleichen Einschränkungen leidet. Somit ist diese Empfehlung nicht mehr relevant.Die lange Antwort:
Beeindruckend! 8 Jahre, 5 Antworten und viele Kommentare später wird der wahre Grund immer noch nicht angesprochen.
In den Android-Tagen vor dem Lutscher war Dalvik die verwendete Prozess-VM. Da während dieser Zeit nur wenig Speicher für Anwendungen zur Verfügung stand, hatte Dalvik viele Speicherbeschränkungen. Für die Speicherzuweisung musste Dalvik über den Haufen gehen und Platz finden. Der Haufen würde auch mit der Zeit fragmentiert werden. Dalvik konnte nicht defragmentieren, so dass es sich im Laufe der Zeit zuordnete und schließlich keinen Platz mehr hatte.
kommt aus Dalvik-Tagen, weil ein
Enum
viel größer ist als einint
und die Speicherzuweisung sehr teuer war.Dalvik wurde heute durch ART ersetzt. ART wurde in KitKat veröffentlicht und ist seit Lollipop Standard.
ART wurde von Grund auf entwickelt, um nicht den Speicher, sondern die Leistung zu optimieren. Es ist auch für Zuordnungen und Sammlungen optimiert. Der Grund dafür ist, dass Speicher für große Objekte reserviert ist. Anstatt alles auf den gleichen Haufen zu legen und dann Platz für große Objekte inmitten all der kleinen zu finden, legt ART alle großen Objekte und Bitmaps in einem separaten Haufen ab. Und dann gehen die kleinen Objekte in den separaten Haufen. Auch kann es defragmentieren.
Nach ART ist
Enum
es egal , ob Sie Android verwenden, und deshalb ist die Empfehlung jetzt weg.Dies kommt von Chet Haase bei Google. Ich empfehle, sein Google I / O-Gespräch zu finden und das gesamte Video anzusehen. Es enthält viele nützliche Informationen und Einblicke in Android.
quelle
Es ist immer noch schlecht für die Speicherleistung.
https://developer.android.com/training/articles/memory.html#Overhead
EDIT: Jetzt ist es entfernt. Sicher zu verwendende Aufzählungen.
quelle