Android 中的 Enum 到底占多少内存?该如何用?

直接看代码吧.

public enum MonthEnum {
    // 4 bytes
    JANUARY,  // -> 87 bytes
    // 4 bytes
    FEBRUARY  // ->  88 bytes

    // 生成的数组 24 + 4 + 4
    // MonthEnum[] values
}

public class MonthConst {
    // 4 bytes
    public static final int JANUARY = 1;
    // 4 bytes
    public static final int FEBRUARY = 2;
}

public class UseMonth {
    // 4 bytes
    private MonthEnum mMonthEnum = MonthEnum.JANUARY;

    // 4 bytes
    private int mMonth = MonthConst.JANUARY;
}

我们不考虑 MonthEnum 和 MonthConst 他们对于 dex 大小的影响,这个没什么意义,几十个 Enum 占用的大小,也不及一张图片。

我们要对比的是 UseMonth 中这两种写法所占用的内存大小在 Dalvik 虚拟机下的区别。

在 UseMonth 中,他们一个是 int 类型,一个是对象引用,都是 4 字节,没有区别。

refer的文章经过一番内存的分析后, 结论是: MonthEnum.JANUARY,含有 7 个字符,87 个字节;MonthEnum.FEBRUARY,8 个字符,88 个字节。

我们对比的大小,指的是对象本身的大小加上对象成员指向的其他对象大小,即 shadow heap + maintain heap。
文档(https://developer.android.com/training/articles/memory.html#Overhead)中提到:
You should strictly avoid using enums on Android.

如果应用确实对内存用量敏感,或者你就是追求极致,可用常量来代替枚举。
常量一般会和 Bit Mask 结合起来用,这样可以极致地减少了内存使用,同时使代码有较好的可读性。

refer to : http://www.liaohuqiu.net/cn/posts/android-enum-memory-usage/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容