例如,我正在运行一个简单的嵌套循环,它在两个数组中找到重复的元素。列表大小为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;
}
答案 0 :(得分:2)
java虚拟机在程序运行时优化它。当频繁执行相同的代码段时,程序流将围绕此代码路径进行优化,以便尽快执行。
当您想要对算法进行基准测试时,通常的做法是多次执行它们并丢弃前几次迭代的时间测量。
但是请注意,还有其他因素可以干扰您的时间测量,例如不可预测的垃圾收集器,它可以随时开始工作并减慢JVM的其余部分。