Java HotSpot枚举开销

时间:2014-01-16 16:31:04

标签: java performance enums

假设你有一个“简单”的枚举:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

然后你在某个地方使用它:

Day day = Day.SUNDAY;
...
if(day==Day.SUNDAY) {...}

如何比较使用整数的性能(内存和时间)?

int day = Day.SUNDAY;
...
public class Day {
    public static final int SUNDAY=0;
    public static final int MONDAY=1;
}

我们启用了JIT HotSpot编译器以及其他“标准”优化。

1 个答案:

答案 0 :(得分:7)

每当您引用Day.SUNDAY时,枚举可能会有轻微的性能损失,因为int常量是编译时常量,因此可以内联,而enum常量需要getstatic

比较两个整数或两个引用当然在所需时间方面是相同的,因为您正在比较引用(地址),而不是调用.equals()

当然,这里的表现是微不足道的;担心这个问题的唯一原因是,如果这是您的应用程序中性能关键部分,并且分析显示使用整数更好。枚举对于可维护性和代码正确性的好处远远超过了像这样的轻微低效率。