枚举需要多少内存?


问题内容

例如,如果我有一个带有两种情况的枚举,它是否比布尔值占用更多的内存?语言:Java,C ++


问题答案:

在Java中,an
enum是成熟的类

Java编程语言的枚举类型比其他语言的枚举类型更强大。枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。

为了查看每个文件的实际大小enum,让我们做一个实际enumclass文件并检查它创建的文件的内容。

假设我们有以下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中创建对象的开销一样多。