我正在我的 Android 手机上运行斐波那契基准测试,我得到了一些奇怪的结果。因为我并不关心 UI 线程是否被锁定,所以我在我的应用程序的 UI 线程内运行下面的代码(这会影响性能吗?)。
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),我在本机平台上使用 Java 得到了 420 秒,在 Chrome 中使用 Javascript 得到了 120 秒,两者都在我的三星 Galaxy Nexus 上运行。
我在 Java for Android 中的实现是否存在明显的错误,可能会减慢基准测试速度?
笔记; 我主要不是希望切换到更快的算法,而是试图理解为什么 Javascript(以及我为 iOS 制作的实现)比 Java 中的 Android 实现要快得多。
在我的笔记本电脑上运行时,Java 的结果比 Javascript 快得多。