A seção "Evitar enums onde você só precisa de ints" foi removida da documentação oficial do desenvolvedor . (Consulte Por que o Android não usa mais enumerações? Para o conteúdo da seção antiga)
Por quê? Houve uma alteração na VM do Android que tornou a dica obsoleta?
Respostas:
a versão original desse documento era apenas um monte de preconceitos. foi reescrito para conter apenas fatos com backup de benchmarks reais e é atualizado à medida que a VM é atualizada. você pode encontrar os vários benchmarks - além de alguns que usamos para otimizar as principais bibliotecas - em http://code.google.com/p/dalvik/ .
fonte
Um palpite:
Assim, para os requisitos comparativamente mundanos de um aplicativo GUI, os benefícios de enums em tempo de desenvolvimento superam em muito o custo extra de tempo de execução.
fonte
Elliott Hughes oferece mais detalhes sobre a documentação reescrita em seu blog: http://elliotth.blogspot.com/2010/09/java-benchmarks.html
A segunda metade da postagem explica que agora todas as reivindicações no documento Desempenho são copiadas com referências. As versões anteriores do documento aparentemente continham reivindicações não verificadas, como "Evite enumerações porque são muito caras".
fonte
A resposta de Elliot Hugues em 2011 disse que o motivo original para evitar enum era por razões de desempenho ... como em "desempenho de processamento". Como esse motivo não foi apoiado pelo fato, ele foi removido da documentação oficial.
Ele foi adicionado posteriormente porque as enumerações adicionam muito mais dados na memória do que o número inteiro.
fonte
IntDef
anotações, que permitem usar constantes int com segurança com os erros e avisos do Android Studio. blog.shamanland.com/2016/02/int-string-enum.htmlTLDR: Dalvik não era bom com alocação de memória e
Enum
usa mais memória queint
. O Android Lollipop substituiu o Dalvik pelo ART, que não sofre as mesmas limitações. Portanto, essa recomendação não é mais relevante.A resposta longa:
Uau! 8 anos, 5 respostas e muitos comentários depois, o verdadeiro motivo ainda não foi abordado.
Nos dias pré-pirulito para Android, Dalvik era o processo usado pela VM. Como havia pouca quantidade de memória disponível para os aplicativos usarem durante esse período, a Dalvik apresentava muitas restrições de memória. Para alocação de memória, Dalvik teve que andar pela pilha e encontrar espaço. O heap também seria fragmentado ao longo do tempo. Dalvik não pôde desfragmentar, para alocar com o tempo e, eventualmente, ficar sem espaço.
vem dos dias de Dalvik porque um
Enum
é muito maior que umint
e a alocação de memória era muito cara.Hoje em dia, Dalvik foi substituído pelo ART. O ART foi lançado no KitKat e é o padrão desde o Lollipop.
O ART foi criado desde o início não para otimizar a memória, mas otimizar o desempenho. Também é otimizado para alocações e cobranças. A razão é que ela tem memória reservada para objetos grandes. Em vez de colocar tudo no mesmo heap e, em seguida, ter que encontrar espaço para objetos grandes entre todos os pequenos, o ART coloca todos os objetos grandes e bitmaps em um heap separado. E então os pequenos objetos vão para a pilha separada. Também pode desfragmentar.
Após a TARV, se você usa o
Enum
Android, não se importa e é por isso que a recomendação foi embora agora.Isto vem de Chet Haase no Google. Eu recomendo encontrar a conversa dele no Google I / O e assistir o vídeo inteiro. Ele contém muitas informações úteis e informações sobre o Android.
fonte
Ainda é ruim para o desempenho da memória.
https://developer.android.com/training/articles/memory.html#Overhead
EDIT: Agora ele foi removido. Seguro usar enums.
fonte