为什么 Java 的 switch 枚举在第一次运行时比它的“if”等价物慢得多?
我知道 JVM 需要“预热”才能可靠地测量性能。因此,每个第一次调用都比任何后续调用慢得多。这并不意味着我们无法根据每次首次运行来衡量性能。
测试标准是:
if语句或switch语句评估的传递值返回整数。我首先测试了枚举,预计性能会略有不同。
相反,我得到的平均值是:
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)