Java HotSpot枚举开销

Kev*_*lan 7 java performance enums

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

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}
Run Code Online (Sandbox Code Playgroud)

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

Day day = Day.SUNDAY;
...
if(day==Day.SUNDAY) {...}
Run Code Online (Sandbox Code Playgroud)

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

int day = Day.SUNDAY;
...
public class Day {
    public static final int SUNDAY=0;
    public static final int MONDAY=1;
}
Run Code Online (Sandbox Code Playgroud)

我们启用了JIT HotSpot编译器以及其他"标准"优化.

Rus*_*ser 7

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

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

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