[英]Java Algorithm time measure
我的问题是,当我尝试准确测量算法执行时间时,一旦完成第一组测试,结果就会大不相同。
我有7个带整数的文本文件,每个文本文件都有两个元素的幂。
2 4 = 16
2 8 = 256
2 12 = 4096
2 16 = 65536
2 20 = 1048576
2 22 = 4194304
2 24 = 16777216
我将这些测试运行X次以获得执行时间。 一个测试用例被认为一次执行了所有上述测试。 我做了几次,而没有更改文本文件数据。
要测量我的算法执行时间,请使用System.nanoTime();
long start = System.nanoTime();
(Algorithm)
long elapsedNanoTime = System.nanoTime() - start;
但是,结果显示在执行第一个测试用例之后,开始测试16和256的下降幅度很大。
测试用例,迭代1:
16个元素需要325336n
256个要素为414861n
4096个元素需要2061728n
65536个元素需要21111426n
1048576个元素需要326898979n
4194304个元素需要1487154649n
16777216个元素需要6700800203n测试用例,迭代2:
16个元素需要2925n
256个元素需要36864n
4096个元素需要885603n
65536个元素需要15839933n
1048576个元素需要332000198n
4194304个元素需要1484967410n
16777216个元素需要6695675287n测试用例,迭代3:
16个元素需要2926n
256元素需要35985n
4096个元素需要679635n
65536个元素需要15462227n
1048576个元素需要328179551n
4194304个元素需要1483733064n
16777216个元素需要6704160641n
如果我分别运行每个测试用例,“编译”该程序以仅进行7个测试,则结果将像上面的迭代1一样出来。
那么,对于为什么执行时间与第一个测试用例及其他用例不同的人,有没有人有见识? 它与程序的初始化有关,还是内存已经在某处分配了数据? 因为到目前为止,我不确定哪个执行时间数据正确。
提前致谢。
考虑使用jmh作为微基准测试的框架。 正如@ dimo414的答案中指出的那样,基准测试在JVM上很困难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.