我在我的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