N***m 发帖数: 4460 | 1 正在学习JNA library,测试了一下
计算sum_i sin(i)的值,i=0,2000000。
分别调用c library和java自己的数学库。
结果如下:
using c function
result = 0.5520835778318177 | elapsed time = 5.188 seconds
using java function
result = 0.5520835778317068 | elapsed time = 0.718 seconds
为什么会差这么多?那大家要是平时需要快速计算结果的情况下,如何
把c++程序和java结合?
===========================================================
public class A {
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)
Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c
"),
CLibrary.class);
double sin(double x);
}
public static void main(String[] args) {
double t= 0 ;
long start = System.currentTimeMillis();
for(int i=0;i<2000000;i++) {
t += CLibrary.INSTANCE.sin(i);
}
long elapsedTimeMillis = System.currentTimeMillis()-start;
float elapsedTimeSec = elapsedTimeMillis/1000F;
System.out.println("using c function");
System.out.println(t+" | "+ elapsedTimeSec);
t = 0;
start = System.currentTimeMillis();
for(int i=0;i<2000000;i++) {
t += java.lang.Math.sin(i);
}
elapsedTimeMillis = System.currentTimeMillis()-start;
elapsedTimeSec = elapsedTimeMillis/1000F;
System.out.println("using java function");
System.out.println(t+" | "+ elapsedTimeSec);
}
} |
b*******s 发帖数: 5216 | 2 你通过jvm调用了2万次native code
可以把这2万次调用节约成1次再试试看? |
N***m 发帖数: 4460 | 3 大侠,能不能说得再明白一点,怎么具体节约成一次?
【在 b*******s 的大作中提到】 : 你通过jvm调用了2万次native code : 可以把这2万次调用节约成1次再试试看?
|
l******e 发帖数: 12192 | 4 jna本来就有overhead
【在 N***m 的大作中提到】 : 大侠,能不能说得再明白一点,怎么具体节约成一次?
|
N***m 发帖数: 4460 | 5 只是没想到差别这么大:)
【在 l******e 的大作中提到】 : jna本来就有overhead
|