系统Nano的性能衡量问题

时间:2019-07-11 14:02:23

标签: java performance

我正在尝试找出哪个功能更快,但是结果有些奇怪:
15-27.89927138384089
时间:54549460
15-27.899271383840894
时间:959352
如果我先交换代码,例如“ logfactorial”的块先出现,那么:
15-27.899271383840894
时间:60053820
15-27.89927138384089
时间:686302
为什么会这样?

import edu.princeton.cs.algs4.StdOut;

public class _20 {
    public static void main(String[] args) {
        int n = 15;

        // place where logfactorial block goes when i swap

        long startTime = System.nanoTime();
        StdOut.println(n + " - " + Math.log(factorial(n)));
        long stopTime = System.nanoTime();
        long elapsedTime = stopTime - startTime;
        StdOut.println("time: " + elapsedTime);

        // logfactorial block begin
        long new_startTime = System.nanoTime();
        StdOut.println(n + " - " + logfactorial(n));
        long new_stopTime = System.nanoTime();
        long new_elapsedTime = new_stopTime - new_startTime;
        StdOut.println("time: " + new_elapsedTime);
        // logfactorial block end
    }

    private static long factorial(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n * factorial(n-1);
        }
    }

    private static double logfactorial(int n) {
        if (n == 1) {
            return 0;
        } else {
            return ( Math.log(n) + logfactorial(n-1));
        }
    }
}

0 个答案:

没有答案