枚举需要多少内存?
问题内容:
例如,如果我有一个带有两种情况的枚举,它是否比布尔值占用更多的内存?语言:Java,C ++
问题答案:
在Java中,an
enum
是成熟的类:
Java编程语言的枚举类型比其他语言的枚举类型更强大。枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。
为了查看每个文件的实际大小enum
,让我们做一个实际enum
的class
文件并检查它创建的文件的内容。
假设我们有以下Constants
枚举类:
public enum Constants {
ONE,
TWO,
THREE;
}
编译以上内容enum
并反汇编生成的class
文件,结果javap
如下:
Compiled from "Constants.java"
public final class Constants extends java.lang.Enum{
public static final Constants ONE;
public static final Constants TWO;
public static final Constants THREE;
public static Constants[] values();
public static Constants valueOf(java.lang.String);
static {};
}
反汇编表明an的每个字段enum
都是Constants
enum
该类的实例。(使用进行进一步分析javap
将发现,通过new Constants(String)
在静态初始化块中调用构造函数来创建新对象来初始化每个字段。)
因此,我们可以说enum
我们创建的每个字段至少与在JVM中创建对象的开销一样多。