为什么一段代码的多次迭代会增加平均运行时间呢?

时间:2013-01-25 20:26:35

标签: java

例如,我正在运行一个简单的嵌套循环,它在两个数组中找到重复的元素。列表大小为2000,如果我连续多次运行程序,平均需要大约25毫秒(猜测)。但是,在for循环中运行一次程序,循环次数越多,一次迭代的平均运行时间就越快。例如10次​​是每次迭代5毫秒,10000次是2毫秒。

我必须测量各种列表大小的几种不同类型的列表交集(例如嵌套循环,二进制搜索等)的运行时间,所以我不确定哪个更准确。对于较长的问题,它变得更加困难,因为它运行它需要很长时间。

    for (int i = 0; i < A.length-1; i++) {
        for (int j = 0; j < B.length-1; j++) {
            if (A[i] == B[j]) {
                inter++;
            }
        }
    }

我如何生成使用的列表:

public studentList(int size, String course) {
int IDrange=2*size;
studentID=new int[size];
boolean[] usedID=new boolean[IDrange];
for (int i=0;i<IDrange;i++) usedID[i]=false;
for (int i=0;i<size;i++) {
    int t;
    do {
    t=(int)(Math.random()*IDrange);
    } while (usedID[t]);
    usedID[t]=true;
    studentID[i]=t;
}
courseName=course;
numberOfStudents=size;
}

1 个答案:

答案 0 :(得分:2)

java虚拟机在程序运行时优化它。当频繁执行相同的代码段时,程序流将围绕此代码路径进行优化,以便尽快执行。

当您想要对算法进行基准测试时,通常的做法是多次执行它们并丢弃前几次迭代的时间测量。

但是请注意,还有其他因素可以干扰您的时间测量,例如不可预测的垃圾收集器,它可以随时开始工作并减慢JVM的其余部分。