直接看代碼吧.
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 虛擬機下的區(qū)別。
在 UseMonth 中,他們一個是 int 類型预愤,一個是對象引用沟于,都是 4 字節(jié),沒有區(qū)別植康。
refer的文章經過一番內存的分析后旷太, 結論是: MonthEnum.JANUARY,含有 7 個字符销睁,87 個字節(jié)供璧;MonthEnum.FEBRUARY,8 個字符冻记,88 個字節(jié)睡毒。
我們對比的大小,指的是對象本身的大小加上對象成員指向的其他對象大小檩赢,即 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/