gpt4 book ai didi

Java 条件运算符速度与 Hotspot VM 版本

转载 作者:行者123 更新时间:2023-12-01 07:16:21 28 4
gpt4 key购买 nike

请考虑以下 java 源代码:



package com.stackoverflow;

公共(public)类 CondSpeed {
私有(private)静态最终长 COUNT = 1000000000;
私有(private)静态最终长OUTER_COUNT = 15;

私有(private)静态长 notEqOperator = 0L;
私有(private)静态长notOperator = 0L;
私有(private)静态长等于False = 0L;

公共(public)CondSpeed(){
极好的();
}

公共(public)静态无效主(字符串[] args){

for(int outCount = 0;outCount < OUTER_COUNT;outCount++){
notEqOperator += testNotEaualsOperator();
equalsFalse += testEqualFalse();
notOperator += testNotOperator();
}

长avrForNotEqOperator = (notEqOperator/OUTER_COUNT);
长 avrForEqualsFalse = (equalsFalse/OUTER_COUNT);
长avrForNotOperator = (notOperator/OUTER_COUNT);

System.out.println("不等于运算符的 Avr: "+avrForNotEqOperator);
System.out.println("Avr 等于\"false\"运算符: "+avrForEqualsFalse);
System.out.println("Not 运算符的 Avr: "+avrForNotOperator);

}

私有(private)静态长 testEqualFalse(){
现在很长= System.currentTimeMillis();

for(long i = 0;i < COUNT;i++){
boolean 值 truFalse = returnTrueOrFalse();

如果(真假==假){
//没做什么...
}
}

return (System.currentTimeMillis() - 现在);
}


私有(private)静态长 testNotOperator(){
现在很长= System.currentTimeMillis();

for(long i = 0;i < COUNT;i++){
boolean 值 truFalse = returnTrueOrFalse();

如果(!trueFalse){
//没做什么...
}
}

return (System.currentTimeMillis() - 现在);
}

私有(private)静态长 testNotEaualsOperator(){
现在很长= System.currentTimeMillis();

for(long i = 0;i < COUNT;i++){
boolean 值 truFalse = returnTrueOrFalse();

如果(真假!=真){
//没做什么...
}
}

return (System.currentTimeMillis() - 现在);
}

私有(private)静态 boolean 值 isFalse;
私有(private)静态 boolean returnTrueOrFalse(){
如果(是假){
是假=假;
}
别的{
是假=真;
}
返回值为False;
}

}

正如您所看到的,这是针对 3 个版本的 if(false) 条件的测试。

  • 我感兴趣的是为什么不同条件语句中的结果首先不同。 ((我知道这显然是编译器将 .java 解释为字节码的方式。))还有比这更多的吗?
  • 其次。查看不同 Hotspot VM 的差异。见底部。这是因为虚拟机在各个版本上的更新/改进吗?或者还有更多的事情吗?
  • 这是测试此类内容的最佳方法吗?

---结果 Mac OS X---

JavaVM HotSpot 1.6.0

不等于运算符的 Avr:1937
Avr 等于“false”运算符:1937
非运算符 Avr:1941

JavaVM HotSpot 1.5.0

不等于运算符的 Avr:5023
等于“false”运算符的 Avr:5035
非运算符的 Avr:5067

JavaVM HotSpot 1.4.2

不等于运算符的 Avr:3993
Avr 等于“false”运算符:4015
非运算符的 Avr:4009

JavaVM HotSpot 1.4.0

不等于运算符的 Avr:3961
等于“false”运算符的 Avr:3960
非运算符的 Avr:3961

谢谢。

最佳答案

!、!= 和 == 之间的差异看起来像随机噪声 - 您真的希望它们达到完全相同的毫秒数吗?

然而,JVM 版本的改进几乎肯定是真实的,尽管它可能非常特定于特定的代码段,即某些落在需要正确处理的复杂性阈值内的问题。即使稍有不同也可能不会显示相同的结果。

为了改进测试,请计算 standard deviation每个测试运行的结果,看看它们是否有统计上的差异(或者只是打印出所有 10 个结果并观察它们)。

关于Java 条件运算符速度与 Hotspot VM 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382930/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com