如何衡量用Java编写的代码的速度?(人工智能算法)
2022-09-02 19:35:32
如何衡量用Java编写的代码的速度?
我计划开发软件,使用所有目前可用的AI和ML算法解决数独问题,并将时间与简单的蛮力方法进行比较。我需要测量每种算法的时间,我想征求有关最佳方法的建议?非常重要的一点是,无论CPU功率/内存如何,程序必须在任何计算机上都很有用。
谢谢。
如何衡量用Java编写的代码的速度?
我计划开发软件,使用所有目前可用的AI和ML算法解决数独问题,并将时间与简单的蛮力方法进行比较。我需要测量每种算法的时间,我想征求有关最佳方法的建议?非常重要的一点是,无论CPU功率/内存如何,程序必须在任何计算机上都很有用。
谢谢。
正如其他人所建议的那样,这是相当不错的,但请注意以下注意事项:System.currentTimeMillis()
System.currentTimeMillis()
测量已用的物理时间(“挂钟时间”),而不是 CPU 时间。如果计算机上正在运行其他应用程序,则您的代码将获得较少的 CPU,并且其速度将降低。因此,仅在其他空闲系统上工作台。System.currentTimeMillis()
System.currentTimeMillis()
这将生成以下代码:
for (int i = 0; i < 10; i ++) {
runMethod();
}
int count = 10;
for (;;) {
long begin = System.currentTimeMillis();
for (int i = 0; i < count; i ++)
runMethod();
long end = System.currentTimeMillis();
if ((end - begin) < 10000) {
count *= 2;
continue;
}
reportElapsedTime((double)(end - begin) / count);
}
如您所见,有前十个“空”运行。然后,程序在循环中运行该方法,根据需要多次运行,以便循环至少需要十秒钟。十秒钟应该足以消除GC运行和其他系统不准确之处。当我对哈希函数实现进行基准测试时,我使用两秒钟,即使函数本身根本没有触发内存分配,我仍然会得到高达3%的变化。
我通常使用
System.currentTimeMillis()
计算时间增量:
long start = System.currentTimeMillis();
/* do your algorithm iteration */
long elapsed = System.currentTimeMillis() - start;
请注意,根据您使用的操作系统,函数的精度可能大于1毫秒(也是十分之一毫秒),因此您必须对其进行调整以用于分析。
编辑:还有做同样的事情的替代方案,但你不能保证精度是纳秒。System.nanoTime()