/* Original JDK 9 Benchmark Mode Cnt Score Error Units SwitchBench.enumConstIf avgt 10 1.994 ± 0.006 ns/op SwitchBench.enumConstSwitch avgt 10 2.533 ± 0.006 ns/op SwitchBench.enumVarIf avgt 10 2.529 ± 0.004 ns/op SwitchBench.enumVarSwitch avgt 10 2.706 ± 0.005 ns/op SwitchBench.intConstIf avgt 10 1.988 ± 0.001 ns/op SwitchBench.intConstSwitch avgt 10 1.996 ± 0.034 ns/op SwitchBench.intVarIf avgt 10 2.464 ± 0.003 ns/op SwitchBench.intVarSwitch avgt 10 2.123 ± 0.002 ns/op Original JDK 10 Benchmark Mode Cnt Score Error Units SwitchBench.enumConstIf avgt 10 2.125 ± 0.002 ns/op SwitchBench.enumConstSwitch avgt 10 2.501 ± 0.025 ns/op SwitchBench.enumVarIf avgt 10 2.593 ± 0.004 ns/op SwitchBench.enumVarSwitch avgt 10 2.862 ± 0.053 ns/op SwitchBench.intConstIf avgt 10 2.123 ± 0.003 ns/op SwitchBench.intConstSwitch avgt 10 2.125 ± 0.001 ns/op SwitchBench.intVarIf avgt 10 2.458 ± 0.019 ns/op SwitchBench.intVarSwitch avgt 10 2.439 ± 0.039 ns/op @Stable Enum.ordinal in JDK 10 Benchmark Mode Cnt Score Error Units SwitchBench.enumConstIf avgt 10 2.126 ± 0.007 ns/op SwitchBench.enumConstSwitch avgt 10 2.159 ± 0.003 ns/op SwitchBench.enumVarIf avgt 10 2.593 ± 0.004 ns/op SwitchBench.enumVarSwitch avgt 10 2.842 ± 0.006 ns/op SwitchBench.intConstIf avgt 10 2.123 ± 0.002 ns/op SwitchBench.intConstSwitch avgt 10 2.123 ± 0.002 ns/op SwitchBench.intVarIf avgt 10 2.451 ± 0.002 ns/op SwitchBench.intVarSwitch avgt 10 2.274 ± 0.012 ns/op Original JDK 10 + Graal Benchmark Mode Cnt Score Error Units SwitchBench.enumConstIf avgt 10 2.349 ± 0.011 ns/op SwitchBench.enumConstSwitch avgt 10 2.345 ± 0.005 ns/op SwitchBench.enumVarIf avgt 10 2.612 ± 0.015 ns/op SwitchBench.enumVarSwitch avgt 10 2.862 ± 0.005 ns/op SwitchBench.intConstIf avgt 10 2.345 ± 0.015 ns/op SwitchBench.intConstSwitch avgt 10 2.347 ± 0.009 ns/op SwitchBench.intVarIf avgt 10 2.607 ± 0.010 ns/op SwitchBench.intVarSwitch avgt 10 2.435 ± 0.006 ns/op @Stable Enum.ordinal in JDK 10 + Graal Benchmark Mode Cnt Score Error Units SwitchBench.enumConstIf avgt 10 2.352 ± 0.010 ns/op SwitchBench.enumConstSwitch avgt 10 2.342 ± 0.007 ns/op SwitchBench.enumVarIf avgt 10 2.889 ± 0.012 ns/op SwitchBench.enumVarSwitch avgt 10 2.652 ± 0.069 ns/op SwitchBench.intConstIf avgt 10 2.346 ± 0.005 ns/op SwitchBench.intConstSwitch avgt 10 2.346 ± 0.004 ns/op SwitchBench.intVarIf avgt 10 2.886 ± 0.009 ns/op SwitchBench.intVarSwitch avgt 10 2.499 ± 0.004 ns/op */ package jdk.test; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; import org.openjdk.jmh.annotations.Fork; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Threads; import org.openjdk.jmh.annotations.Warmup; import java.util.concurrent.TimeUnit; @BenchmarkMode(Mode.AverageTime) @Fork(value = 1) @Warmup(iterations = 5) @Measurement(iterations = 10) @Threads(1) @OutputTimeUnit(TimeUnit.NANOSECONDS) @State(Scope.Benchmark) public class SwitchBench { int i = 2; E e = E.B; enum E { A, B, C } @Benchmark public int intConstSwitch() { return intSwitch(2); } @Benchmark public int intVarSwitch() { return intSwitch(i); } @Benchmark public int enumConstSwitch() { return enumSwitch(E.B); } @Benchmark public int enumVarSwitch() { return enumSwitch(e); } @Benchmark public int intConstIf() { return intIf(2); } @Benchmark public int intVarIf() { return intIf(i); } @Benchmark public int enumConstIf() { return enumIf(E.B); } @Benchmark public int enumVarIf() { return enumIf(e); } private int intSwitch(int i) { switch (i) { case 1: return 11; case 2: return 22; case 3: return 33; default: return 0; } } private int enumSwitch(E e) { switch (e) { case A: return 11; case B: return 22; case C: return 33; default: return 0; } } private int intIf(int i) { if (i == 1) { return 11; } else if (i == 2) { return 22; } else if (i == 3) { return 33; } else { return 0; } } private int enumIf(E e) { if (e == E.A) { return 11; } else if (e == E.B) { return 22; } else if (e == E.C) { return 33; } else { return 0; } } }