随着循环迭代次数的增加,平均运行时间会减少?

时间:2013-01-25 22:57:54

标签: java

使用几种不同的方法(二进制搜索,嵌套循环等),我正在测量两个数组之间寻找共同元素的平均运行时间。但是,当我增加循环的时间数时(我将运行时除以结尾的循环次数),每次迭代的平均运行时间减少。也就是说,它变得更快。

我在main方法中发现了导致这一行的行,所以我不会发布其余的main:

int intersection=studentList.intersectionSizeNestedLoops(firstList1,secondList1);

我查看了每次迭代的运行时而不是最后的平均值,我完全注意到了原因。出于某种原因,前几次迭代总是需要更长的时间(取决于列表大小,但是前几个时间为500 000 ns,之后的所有内容为20 000 ns,因此当您有更多迭代时,它会平均到较低的运行时间因此更多的20 000 ns迭代)。

虽然它不是任何算法,但它必须是学生列表方法。

生成列表:

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 :(得分:8)

这是完全正常的。程序变得更快,因为just-in-time compiler启动并编译部分代码。

您可以通过使用-XX:+PrintCompilation启动JVM来验证这一点。

定时Java代码可能很棘手。有关详细讨论,请参阅How do I write a correct micro-benchmark in Java?