函数运行多长时间(持续时间短)

时间:2018-11-14 01:06:30

标签: java time benchmarking nanotime

我是Java编程的新手,我在计算函数运行所需的时间时遇到了一个问题。

首先了解一些背景知识-我在Python方面拥有丰富的经验,如果您熟悉Jupyter Notebook / Lab %%timeit函数的功能,我会尝试重新创建它。这是运行中的照片(抱歉,尚无法嵌入足够的业力):

Snip of Jupyter %%timeit

它的作用是运行单元格的内容(在这种情况下为递归函数)1k,10k或100k次,并提供函数的平均运行时间和标准差。

我的第一个实现(使用相同的递归函数)使用了System.nanoTime()

public static void main(String[] args) {

    long t1, t2, diff;
    long[] times = new long[1000];
    int t;
    for (int i=0; i< 1000; i++) {

        t1 = System.nanoTime();
        t = triangle(20);
        t2 = System.nanoTime();

        diff = t2-t1;
        System.out.println(diff);
        times[i] = diff;
    }

    long total = 0;
    for (int j=0; j<times.length; j++) {
        total += times[j];
    }
    System.out.println("Mean = " + total/1000.0);
}

但是平均值却被大打折扣了-由于某种原因,该函数的第一次迭代(多次运行)需要一百万纳秒的时间:

Pic of initial terminal output

在前十个左右之后的每次迭代都需要395纳米或0纳米-因此那里也可能存在问题...不确定发生了什么!

也-我正在计时的递归函数的代码:

static int triangle(int n) {
    if (n == 1) {
        return n;
    } else {
        return n + triangle(n -1);
    }
}

最初,我在函数的第一行有n = Math.abs(n)行,但是后来我删除了它,因为……嗯。我是唯一使用此工具的人。

我尝试了this SO post中提出的许多不同建议,但是它们各自都有自己的问题...如果您需要,我可以讨论一下。

无论如何,在此先感谢您的帮助和专业知识!

0 个答案:

没有答案