同一算法在Java和Scala之间的性能差异

时间:2019-04-03 15:45:17

标签: java algorithm scala performance

我正在测试一种记忆的递归版本,以便在给定点上找到斐波那契数(我正在使用50)。 Java中的执行时间是瞬时的,而在Scala中,它的执行时间约为65-67秒。这是Scala代码:

def fibonacciDP(array : Array[Long] , counter : Int) : Long = {
        if (array(counter) != 0L) array(counter)
        if (counter == 1 || counter == 2) 1L
         else {
            val result = fibonacciDP(array, counter - 1) + fibonacciDP(array, counter - 2)
            array(counter) = result
            result
        }
    }     

这是Java代码:

private static long fibonacciDP(long[] array, int counter) {
        if (!(array[counter] == 0L)) {
            return array[counter];
        }
        if (counter == 1 || counter == 2) return 1L;
        final long result = fibonacciDP(array,counter - 1) + fibonacciDP(array, counter - 2);
        array[counter] = result;
        return result;
    }  

我在以下测试它们:
Scala:

def main(args: Array[String]): Unit = {
    val counter = 50
    val array = Array.fill(counter+1){0L}
    val startTime = System.currentTimeMillis()
    println(startTime)
    val result = fibonacciDP(array,counter)
    println(result)
    val endTime = System.currentTimeMillis()
    println(endTime - startTime)
}    

Java:

public static void main(String[] args) {
    final int counter = 50;
    long[] array = new long[50+1];
    final long startTime = System.nanoTime();
    final long fiboNum = fibonacciDP(array,counter);
    final long endTime = System.nanoTime();
    System.out.println((endTime - startTime)/1000000);
}  

然后,我在Scala函数的前两个条件中的值上添加了return关键字,执行速度下降到平均4ms(3-5ms范围)。
为什么执行速度会有差异?

0 个答案:

没有答案