从官方开发者文档中删除了"避免只需要Ints的枚举"部分.(请参阅为什么Android不使用更多枚举?对于旧版内容)
为什么?是否有Android VM的更改使得提示过时了?
Ell*_*hes 157
该文件的原始版本只是一堆偏见.它被重写为仅包含由实际基准备份的事实,并且随着VM的更新而更新.您可以在http://code.google.com/p/dalvik/找到各种基准测试 - 以及我们用于优化核心库的一些基准测试.
Jos*_*Lee 26
一个猜测:
因此,对于GUI应用程序的相对平凡的要求,枚举的开发时间好处远远超过额外的运行时成本.
jko*_*ker 23
Elliott Hughes在他的博客上提供了有关文档重写的更多详细信息:http://elliotth.blogspot.com/2010/09/java-benchmarks.html
该帖子的后半部分解释说,性能文档的每个声明现在都备有基准.该文档的早期版本显然包含未经证实的声明,例如"避免枚举,因为它们太贵了".
Thi*_*Roy 12
来自Elliot Hugues的2011年答案说,避免枚举的最初原因是出于性能原因......就像"处理性能"一样.由于这个原因没有得到事实的支持,因此它已从官方文档中删除.
它之后被添加,因为枚举在内存中添加的数据比使用整数要多得多.
Ade*_*mad 12
TLDR: Dalvik 不擅长内存分配,Enum使用的内存比int. Android Lollipop 用 ART 取代了 Dalvik,它没有同样的限制。因此,该建议不再相关。
长答案:
哇!8 年,5 个答案和许多评论之后,真正的原因仍未解决。
在棒棒糖之前的 Android 时代,Dalvik 是 VM 使用的进程。由于在那段时间里只有少量内存可供应用程序使用,因此 Dalvik 有很多内存限制。对于内存分配,Dalvik 必须遍历堆并找到空间。随着时间的推移,堆也会变得碎片化。Dalvik 无法进行碎片整理,因此它会随着时间的推移分配并最终耗尽空间。
避免只需要整数的枚举
来自 Dalvik 时代,因为 anEnum比 an 大得多,int而且内存分配非常昂贵。
快进到今天,Dalvik 已被 ART 取代。ART 出现在 KitKat 中,并且自 Lollipop 以来是默认设置。
ART 是从头开始创建的,不是为了优化内存,而是为了优化性能。它还针对分配和集合进行了优化。原因是它为大对象预留了内存。ART 不是将所有东西都放在同一个堆中,然后必须在所有小对象中为大对象找到空间,而是将所有大对象和位图放在一个单独的堆中。然后小对象进入单独的堆。它也可以进行碎片整理。
在 ART 之后,如果您使用EnumAndroid 则不在乎,这就是建议现在消失的原因。
这是来自 Google 的 Chet Haase。我建议找到他的 Google I/O 演讲并观看整个视频。它包含许多有用的信息和对 Android 的洞察。