Sekcja „Unikaj wyliczeń tam, gdzie potrzebujesz tylko Ints” została usunięta z oficjalnej dokumentacji programistów . (Zobacz Dlaczego Android nie używa więcej wyliczeń? Dla starej zawartości sekcji)
Czemu? Czy nastąpiła zmiana w maszynie wirtualnej z systemem Android, która spowodowała, że wskazówka stała się przestarzała?
Odpowiedzi:
oryginalna wersja tego dokumentu była tylko zbiorem uprzedzeń. został przepisany, aby zawierał tylko fakty poparte rzeczywistymi testami porównawczymi, i jest aktualizowany wraz z aktualizacją maszyny wirtualnej. różne testy porównawcze - a także niektóre testy porównawcze, których używamy do optymalizacji podstawowych bibliotek - można znaleźć pod adresem http://code.google.com/p/dalvik/ .
źródło
Przypuszczenie:
W związku z tym w przypadku stosunkowo przyziemnych wymagań aplikacji z interfejsem graficznym korzyści wynikające z wyliczeń w czasie projektowania znacznie przewyższają dodatkowy koszt czasu wykonywania.
źródło
Elliott Hughes oferuje więcej szczegółów na temat przepisywania dokumentacji na swoim blogu: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
W drugiej połowie postu wyjaśniono, że każde oświadczenie w dokumencie wydajności jest teraz poparte testami porównawczymi. Poprzednie wersje dokumentu najwyraźniej zawierały niezweryfikowane twierdzenia, na przykład „Unikaj wyliczeń, ponieważ są zbyt drogie”.
źródło
W odpowiedzi z 2011 r. Elliota Huguesa stwierdzono, że pierwotnym powodem unikania wyliczenia była wydajność… jak w przypadku „wydajności przetwarzania”. Ponieważ ten powód nie był poparty faktami, został usunięty z oficjalnej dokumentacji.
Został dodany później, ponieważ wyliczenia dodają o wiele więcej danych do pamięci niż użycie liczb całkowitych.
źródło
IntDef
adnotacje, które pozwalają bezpiecznie używać stałych int z błędami i ostrzeżeniami Android Studio. blog.shamanland.com/2016/02/int-string-enum.htmlTLDR: Dalvik nie radził sobie dobrze z alokacją pamięci i
Enum
zużywa więcej pamięci niżint
. Android Lollipop zastąpił Dalvik ART, który nie ma takich samych ograniczeń. Dlatego to zalecenie nie ma już zastosowania.Długa odpowiedź:
Łał! 8 lat, 5 odpowiedzi i wiele komentarzy później, prawdziwy powód nadal nie został rozwiązany.
W czasach prelollipop Android, Dalvik był procesem używanym jako maszyna wirtualna. Ponieważ w tym czasie dostępna była niewielka ilość pamięci dla aplikacji, w Dalvik było wiele ograniczeń pamięci. Aby przydzielić pamięć, Dalvik musiał przejść stos i znaleźć miejsce. Sterta również ulegała fragmentacji z czasem. Dalvik nie mógł zdefragmentować, więc przydzielałby go w czasie i ostatecznie zabrakło miejsca.
pochodzi z czasów Dalvik, ponieważ
Enum
jest dużo większy niż a,int
a alokacja pamięci była bardzo droga.W dzisiejszych czasach Dalvik został zastąpiony przez ART. ART pojawił się w KitKat i jest domyślny od Lollipopa.
ART został stworzony od podstaw nie po to, aby zoptymalizować pamięć, ale aby zoptymalizować wydajność. Jest również zoptymalizowany pod kątem alokacji i kolekcji. Powodem jest to, że ma pamięć zarezerwowaną dla dużych obiektów. Zamiast umieszczać wszystko w tej samej stercie, a następnie szukać miejsca na duże obiekty pośród wszystkich malutkich, ART umieszcza wszystkie duże obiekty i mapy bitowe w osobnej stercie. A potem małe przedmioty trafiają do oddzielnej sterty. Może również defragmentować.
Po ART, jeśli używasz
Enum
Androida, to nie obchodzi i dlatego rekomendacja zniknęła.To pochodzi od Cheta Haase'a z Google. Polecam znaleźć jego dyskusję Google I / O i obejrzeć cały film. Zawiera wiele przydatnych informacji i wgląd w Androida.
źródło
Nadal źle wpływa na wydajność pamięci.
https://developer.android.com/training/articles/memory.html#Overhead
EDYCJA: Teraz jest usunięta. Bezpieczne w użyciu wyliczenia.
źródło