斐波那契数Java中native C++方法和Java方法的运行时间比较

phantomjoker 2017-09-23 06:14:06
听说Java很慢,于是我做了一个测试,想知道会慢多少
下面是Java的代码
用的eclipse oxygen
win10,64位

package nativeJava;

import java.io.File;

public class nativeRun {
public static void main(String[] args) {
long start1 = System.currentTimeMillis();
System.out.println(fabonaci(45));
long enDate1 = System.currentTimeMillis();
System.out.println("fabonaci:" + (enDate1-start1) + "ms");
long start2 = System.currentTimeMillis();
System.out.println(jFabonaci(45));
long enDate2 = System.currentTimeMillis();
System.out.println("jFabonaci:"+(enDate2-start2)+"ms");

}
static {
System.load("D:"+File.separator +"fabonaci.dll");
}
public native static int fabonaci(int n);

public static int jFabonaci(int n) {
if(n<3) {
return 1;
}
return jFabonaci(n-1)+jFabonaci(n-2);
}
}

下面是C++的递归求斐波那契数列

#include "nativeJava_nativeRun.h"
jint fabonacisb(jint n);
JNIEXPORT jint JNICALL Java_nativeJava_nativeRun_fabonaci
(JNIEnv *, jclass, jint n) {
return fabonacisb(n);
}
jint fabonacisb(jint n) {
if (n < 3) {
return 1;
}
return fabonacisb(n - 1) + fabonacisb(n - 2);
}

运行结果见下图

看别人说本地方法可以提升效率,可是这里执行斐波那契的递归函数却是C++比Java慢了好多,感觉如果是读取dll太慢,可是这已经快1分钟的本地方法运行时间了,这究竟是为什么呢?
...全文
177 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
phantomjoker 2017-09-24
  • 打赏
  • 举报
回复
我在C++方法里面也加了运行时间的测量,和在java中的数据只相差1ms,我怀疑这里java虚拟机进行了自动优化,我希望能知道大概怎么优化的。
yunshouhu 2017-09-24
  • 打赏
  • 举报
回复
用cpp的话,你应该在native层计算算法耗时,不该把调用native开销算进去,另外你测试的数据不够大和全。

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧