假设您在 Java 中有一个这样的假设枚举(纯粹出于演示目的,这不是我真正希望使用的代码):
enum Example{
FIRST,
SECOND,
THIRD,
...
LAST;
}
在编译器停止之前,枚举中最多可以包含多少成员?
其次,当您的代码引用具有 10 个成员而不是 100 或 1,000 个成员的枚举时(除了存储大型类所需的明显内存开销之外),在运行时是否存在任何性能差异?
最佳答案
语言规范本身没有限制。然而,类文件有许多限制枚举数量的限制,上限为 65,536 (2^16) 个枚举:
字段数
JVMS 4.1指定 ClassFile
最多可以有 65,536 (2^16) 个字段。枚举作为静态字段存储在类文件中,因此枚举值和枚举成员字段的最大数量为 65,536。
常量池 JVMS 还规定 Constant Pool 最多可以有 65,536 个。常量池存储所有字符串文字、类型文字、父类(super class)型、超接口(interface)类型、方法签名、方法名称、AND 枚举值名称。因此必须少于 2^16 个枚举值,因为名称字符串需要共享常量池限制。
静态方法初始化 方法的最大限制是 65,535 字节(字节码)。因此 Enum 的静态初始值设定项必须小于 64Kb。虽然编译器可能会将其拆分为不同的方法(请参阅 Bug ID: 4262078)以将初始化分布到小块中,但编译器目前不会这样做。
长话短说,没有简单的答案,答案不仅取决于枚举值的数量,还取决于枚举具有的方法、接口(interface)和字段的数量!
关于java - Java 枚举中可以拥有的成员数量有多少限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1823346/