最近做了个验证直观的测试,分两部分。(一)
对于C/CPP,两者编写繁琐,前者非OOPL,后者深不可测;比较务实的是学java。对于R使用者(估计matlab也类似),在遇到数值迭代、循环嵌套等情形时,借助rJava可以将这些任务交给java做,或在java中调用R完成统计模型。
为了对比,这里测试了java和R递归计算fibonacci(40)的速度。
大体都肯定了jvm的优化力。但对R测试一直没有。先贴源码(写得很简陋):
for java
package trier;
public class TRIER
{
public static void main(String[] args){
long startTime=System.currentTimeMillis();
System.out.println(fila(40));
long endTime=System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
}
public static long fila(int num) {
return (num<3)? 1: fila(num-1)+fila(num-2);
}
}
for R
ptm
fila=function(x){
if(x<3)return(1)
y=fila(x-1)+fila(x-2)
return(y)
}
fila(40)
proc.time() - ptm
结果
for java:
102334155
程序运行时间: 1390ms
for R:
user system elapsed
539.28 0.16 542.04
注意:1.R的运行时间单位是sec,所以速度差很多(我几近睡着了)。
(二)
(一)比较了R和java,java要显著快于R。那么从R中调用java耗的时间是怎样呢?
直观上,可以肯定Rjava慢于java,快于R,下面验证一下
fib$filaBmk() # or .jcall(fib,"S","filaBmk")
[1] "The result is 102334155. The running time is 1438ms"
发现还是很快的,不比java慢多少,那么换个复杂的例子Fibonacci(50)。不要小看增加这10个数,运算时间大增。
rjava的绩效:
fib$filaBmk()
[1] "The result is 12586269025. The running time is 176640ms"
java的绩效:
12586269025
程序运行时间: 163843ms
差别是有,但完全可以接受。R就不做了,估计睡一觉醒来了都没完。