小编Mr *_*tor的帖子

为什么 Java 的 switch 枚举在第一次运行时比它的“if”等价物慢得多?

为什么 Java 的 switch 枚举在第一次运行时比它的“if”等价物慢得多?

我知道 JVM 需要“预热”才能可靠地测量性能。因此,每个第一次调用都比任何后续调用慢得多。这并不意味着我们无法根据每次首次运行来衡量性能。

测试标准是:

  1. 始终进行新的运行。
  2. 测量执行单个函数的时间(以纳秒为单位),该函数始终根据if语句或switch语句评估的传递值返回整数。
  3. 存储返回值并在最后打印它,这样它就不会在过程中被丢弃。

我首先测试了枚举,预计性能会略有不同。

相反,我得到的平均值是:

  • 77596纳秒 - 如果
  • 585232纳秒 - 开关

我想看看是否只有枚举具有这种不利的属性,因此我还使用整数和字符串对其进行了测试(从 Java 7 开始,可以在 switch 语句中使用字符串)

INTS

  • 2308纳秒 - 如果
  • 1950纳秒 - 开关

字符串

  • 8517纳秒 - 如果
  • 8322纳秒 - 开关

这两个测试都产生非常相似的结果,表明 if 和 switch 语句在每次运行中都是等效的、非常相似或同样好,但是枚举的情况并非如此。

我在 Windows 和 Linux 上使用 Java 8 和 Java 17 进行了测试。

这是开关枚举代码:

public class SwitchEnum{
    public static void main(String[] args){
        long st = …
Run Code Online (Sandbox Code Playgroud)

java performance enums if-statement switch-statement

1
推荐指数
1
解决办法
359
查看次数