java中多个for内的计时方法

java中多个for内的计时方法,java,elapsedtime,Java,Elapsedtime,我在为的多个中包含的两种方法计时时遇到问题。我使用的是System.currentTimeMillis()。问题是我不知道把开始时间和结束时间放在哪里。我想计时methodA和methodB的5次执行。 当我运行它时,我得到方法A的12ms,方法B的0ms,但程序运行大约需要10分钟。代码如下所示: int count = 0; double e = 0.3; long startTimeA; long endTimeA; long startT

我在为的多个
中包含的两种方法计时时遇到问题。我使用的是
System.currentTimeMillis()。问题是我不知道把开始时间和结束时间放在哪里。我想计时methodA和methodB的5次执行。
当我运行它时,我得到方法A的
12ms
,方法B的
0ms
,但程序运行大约需要10分钟。代码如下所示:

     int count = 0;
     double e = 0.3;
     long startTimeA;
     long endTimeA;
     long startTimeB;
     long endTimeB;
     long sumA = 0;
     long sumB = 0;

     for(int k=0; k<5; k++){
        startTimeA = System.currentTimeMillis();
        startTimeB = System.currentTimeMillis();
        for(int i = 0; i < 40; i++) {
            for(int j = i + 1; j < 40; j++) { 
               double a = methodA();
               endTimeA = System.currentTimeMillis() - startTimeA;
               double b = methodB();
               endTimeB = System.currentTimeMillis() - startTimeB;

               int c = methodC();

            }
            sumA += endTimeA;
            sumB += entTimeB;
     }
  }
  System.out.println("total time A: " + sumA + " ms");
  System.out.println("total time B: " + sumB + " ms");
int count=0;
双e=0.3;
长startTimeA;
长时程a;
长startTimeB;
长时程b;
长sumA=0;
长sumB=0;

对于(int k=0;k,您应该阅读
微观基准测试以及如何在实践中进行

这里有一种方法可以完成您想要做的事情:

private void doSomething() {
    long startTimeA = System.currentTimeMillis();
    executeA();
    long endTimeA = System.currentTimeMillis();
    System.out.println("Total Time A: " + (endTimeA - startTimeA));

    long startTimeB = System.currentTimeMillis();
    executeB();
    long endTimeB = System.currentTimeMillis() - startTimeB;
    System.out.println("Total Time B: " + (endTimeB - startTimeB));
}

private void executeA() {
    for(int k=0; k<5; k++) {
        for(int i = 0; i < 40; i++) {
            for(int j = i + 1; j < 40; j++) { 
               double a = methodA();
            }
        }
    }
}

private void executeB() {
    for(int k=0; k<5; k++) {
        for(int i = 0; i < 40; i++) {
            for(int j = i + 1; j < 40; j++) { 
               double b = methodB();
            }
        }
    }
}
private void doSomething(){
long startTimeA=System.currentTimeMillis();
executeA();
long-endTimeA=System.currentTimeMillis();
System.out.println(“总时间A:+(endTimeA-startTimeA));
long startTimeB=System.currentTimeMillis();
executeB();
long-endTimeB=System.currentTimeMillis()-startTimeB;
System.out.println(“总时间B:+(endTimeB-startTimeB));
}
私有void executeA(){
对于(intk=0;k
for(intk=0;k只需移动

sumA += endTimeA;
sumB += entTimeB;

变成“为了j”循环。

也许你想打印sumA和sumB而不是endTimeA和endTimeB?是的,很抱歉,我本来打算写它的sumA,sumByeah,但这一个给了我每次执行的总时间,我想要5次执行的总时间。是的,但是如果我对每个方法都运行三次,这不比一次要花更多的时间吗?我假设
methodA
methodB
是两个独立的方法,您需要以某种方式对它们进行基准测试。仅用于
循环的
甚至不会花费几毫秒,时间将取决于这两个方法的主要复杂性。
sumA += endTimeA;
sumB += entTimeB;