最近做了个验证直观的测试,分两部分。(一)
对于C/CPP,两者编写繁琐,前者非OOPL,后者深不可测;比较务实的是学java。
对于R使用者(估计matlab也类似),在遇到数值迭代、循环嵌套等情形时,借助rJava可以将这些任务交给java做,或在java中调用R完成统计模型。
为了对比,这里测试了java和R递归计算fibonacci(40)的速度。
已经有好多测试帖子了,比如这里:http://fengmk2.cnpmjs.org/blog/2 ... n-php-ruby-lua.html
大体都肯定了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 <- proc.time()
- 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,所以速度差很多(我几近睡着了)。
2.都是递归算法的比较,尽管存在非递归算法,因此看到有些网友的测试“不公平”。关于空间和时间的厚此薄彼,见http://www.javacodegeeks.com/201 ... g-introduction.html
3.由于计算机性能不同,请别拿这里的结果去和http://fengmk2.cnpmjs.org/blog/2 ... n-php-ruby-lua.html作比较——我的电脑很破。
(二)比较运算速度第二部分
(一)比较了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就不做了,估计睡一觉醒来了都没完。


雷达卡




京公网安备 11010802022788号







