最近做了个验证直观的测试,分两部分。(一)
对于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
for R
结果
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,下面验证一下
发现还是很快的,不比java慢多少,那么换个复杂的例子Fibonacci(50)。不要小看增加这10个数,运算时间大增。
rjava的绩效:
fib$filaBmk()
[1] "The result is 12586269025. The running time is 176640ms"
java的绩效:
12586269025
程序运行时间: 163843ms
差别是有,但完全可以接受。R就不做了,估计睡一觉醒来了都没完。