Nam*_*ace 17 java enums android
首先请参阅Android开发人员指南中的以下引用:
枚举通常需要的内存是静态常量的两倍多.你应该严格避免在Android上使用枚举.
Java中的每个类(包括匿名内部类)都使用大约500个字节的代码. https://developer.android.com/training/articles/memory.html
尽管在第一个要点"严格避免在Android上使用枚举"中发出了不祥的警告,但在这一点上所说的实际上听起来并不是那么糟糕.常量是32位整数,枚举可能是64位引用.在那里给出的关于枚举价格贵两倍的数学是有道理的,而且看起来并不那么可怕.
我担心的是,警告可能部分取决于第二个要点.
我想知道一个简单的枚举"类"声明是否带有500字节的开销?eacn enum类型怎么样?
似乎很有道理,类型可以是"扩展类",因为它们可以采用自己的方法,而不仅仅是实例.要将它短语作为一个问题,如果我的枚举是Color,并且我有20种颜色枚举类型(例如红色,蓝色,绿色......),那么每种类型是500个字节吗?
Lui*_*ano 18
枚举是Android世界中一直存在的无限争论.
你可以在这里听到Romain Guy和Chet Haase的好话:http://www.parleys.com/play/5298f999e4b039ad2298c9e3/chapter57/about
根据这段视频,达尔维克的物体有多大可以计算为:
overhead of Object + overhead of dlmalloc + data + align
请记住,枚举的每个值实际上都是Enum类的一个实例.
要记住的另一个要点是dex文件大小.例如,以下枚举将占用大约1,112个字节
public static enum Things {
    THING_1,
    THING_2;
};
或者你可以有两个静态int,它将占用128个字节.
public static int THING_1 = 1;
public static int THING_2 = 2;
你的dex文件大小有10倍的改进.
关于生成多少编译的dalvik代码也有很大的不同.对于Enum,编译器会为您做很多事情.第一次在运行时加载类时会有一个静态类初始化.它在启动时增加了加班时间.
另一方面,枚举也带来了很多优点:可读性,可用性,类型安全代码.我只会在特殊的极端情况下担心枚举.
特别是当我们考虑使用ProGuard可以优化Enums将它们转换为正常的int常量时.