我在我的Android手機上運行斐波那契基準測試,我得到了一些奇怪的結果。因爲我並不在乎UI線程是否被鎖定,所以我在應用程序的UI線程內部運行下面的代碼(這可能會影響性能btw?)。Android的斐波納契基準/深度遞歸
public void startBenchmark(View view) {
results = "";
results += String.format("Begin test");
for (int i = 45; i < 46; i++) {
startTime = System.currentTimeMillis();
fib(i);
results += String.format("%d\n", System.currentTimeMillis() - startTime);
}
results += String.format("End test");
Log.d("Results", results);
Log.d("Status", "Finished");
}
private static int fib(int n) {
return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}
我也在JavaScript中實現了相應的代碼;
function performBenchmark() {
for (var i = 45; i < 46; i++) {
benchmark(i)
}
}
function benchmark(n){
var start= Date.now();
document.getElementById("disp").innerHTML += "fib(" + n + "): " + fib(n) + " <br />";
document.getElementById("results").innerHTML += (Date.now() - start) + "<br />";
}
function fib(n) {
return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}
我的問題是,FIB(45)我得到的東西像本地平臺420秒使用Java和瀏覽器使用Javascript 120秒對我的三星GALAXY Nexus兩者都運行。
是否有一些明顯的錯誤與我的Java實現Android可能會放緩基準?
注意; 我並不是主要希望切換到更快的算法,但我想了解爲什麼Javascript(以及我爲iOS創建的實現)比爲Android實現的Java快得多。
在我的筆記本電腦上運行,我得到了比Java更快的Java結果。
我在Nexus 7上覆制了你的結果。Java比JS慢3-4倍。我想這是關於內存管理實現的東西。 – yoah 2013-05-10 17:10:48
@yoah;悲傷的臉,但感謝您的測試。任何想法仍然感激! – Poyan 2013-05-10 17:31:55
看看logcat,也許你看到重型GC或類似 – 2013-05-10 18:16:25