Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我衡量执行一段代码所需的时间,意味着我知道代码的效率有多高?JAVA_Java_Profiling_Processing Efficiency_Performance - Fatal编程技术网

如果我衡量执行一段代码所需的时间,意味着我知道代码的效率有多高?JAVA

如果我衡量执行一段代码所需的时间,意味着我知道代码的效率有多高?JAVA,java,profiling,processing-efficiency,performance,Java,Profiling,Processing Efficiency,Performance,给出以下代码,哪一个更有效?real方法returnSomething()实际上也可以返回0,因此需要try/catch //piece one long sleepTime = 200; try{ sleepTime /= returnSomething();} catch(Exception e){sleepTime = 200;} private int returnSomething(){ return 1; } //or //piece two l

给出以下代码,哪一个更有效?real方法returnSomething()实际上也可以返回0,因此需要try/catch

//piece one
long sleepTime = 200;
try{ sleepTime /= returnSomething();}
catch(Exception e){sleepTime = 200;}
private int returnSomething(){
   return 1;
}

              //or

//piece two
long sleepTime = 200;
if(returnSomething() == 3){sleepTime = 67;}
else if(returnSomething() == 2){sleepTime = 100;}
else if(returnSomething() == 1){sleepTime = 200;}
private int returnSomething(){
   return 1;
}
我试图找出哪一段代码在处理器使用方面更有效,它们不会做同样的事情。我想知道我为测试而编写的代码是否适合这个目的,或者我是否可以对代码进行其他类型的测试。我的发现表明,第2部分的效率是第2部分的9倍(执行时间减少了9倍),即使它使用硬代码if语句,并且最后一个if语句总是被执行

完整工作程序

public class CodePerformanceTester
{
    public static void main(String[] args){
        CodePerformanceTester tester = new CodePerformanceTester();
        tester.start();
    }

    public void start(){
       double start = System.currentTimeMillis();
       long sleepTime = 200;
       for(int i=0; i<10000000; i++){

           //uncoment here the two lines below
           //try{ sleepTime /= returnSomething();}
           //catch(Exception e){sleepTime = 200;}

           //coment the IF STATEMENTS when above code uncomented
           if(returnSomething() == 3){sleepTime = 67;}
           else if(returnSomething() == 2){sleepTime = 100;}
           else if(returnSomething() == 1){sleepTime = 200;}
       }
       double end = System.currentTimeMillis();
       System.out.println("Execution time for 10 million iteration was "+(end-start)+" ms.");
    }


    private int returnSomething(){
       return 1;
    }
}
公共类CodePerformanceTester
{
公共静态void main(字符串[]args){
CodePerformanceTester测试仪=新的CodePerformanceTester();
tester.start();
}
公开作废开始(){
双启动=System.currentTimeMillis();
长睡眠时间=200;

对于(int i=0;i第一部分可能比较慢,因为除法比比较值更昂贵。

JVM很有趣,因为它可以根据调用代码的时间、位置和方式来提高或降低效率。最好使用分析器来查看瓶颈在哪里并修复它们。除此之外,您应该调用您的方法循环多次,应该多次尝试,并且需要交换测试顺序以查看哪个更快。在您的示例中,returnSomething确实返回1,JVM很可能会将其内联并相应地优化代码…在一段微不足道的代码上进行微基准测试,我认为最好执行
int-ret=returnS某物();睡眠时间=200/(ret==0?1:ret)
:在temp-var中返回一些内容,只检查0,这比第一个要问的问题更健壮,尽管即使尝试进行这种过早的优化也值得吗?答案很可能是否定的,事实上,回答这一重要问题的是分析器可以真正发挥作用的地方。对于每一段代码,我都会运行测试每次我得到一个不同的结果,结果与前一个结果相差不远,所以我所做的是将所有的值相加,然后除以10。通过这样做,我发现第2段比第1段快。我想知道的是执行时间是否决定了代码效率。我将尝试使用分析器即使我没试过,谢谢。