早就听说Groovy性能比Java还要差很多,于是一直没有花心是去研究它,今天在newsgroup中有看到了有人抱怨Groovy的性能。于是自己也做了个测试,同时也把Rhino拉了进来。

Rhino是Mozilla的javascript脚本引擎,和Groovy性质差不多,但是没有Groovy功能那么多。

代码如下
BenchMark.java
public class BenchMark{
    
public static void main(String args[]){
          
long t=System.currentTimeMillis();
          
double seed=0.5;
          
for(int j=0; j<20; j++)
              
for(int i=0; i<1000000; i++)
              {
                  seed
=Math.cos(seed+i);
              }
          
long t2=System.currentTimeMillis();
          System.out.println(t2
-t);
    }
}

BenchMark.js
importPackage(java.lang);
var t = System.currentTimeMillis();
var seed = 0.5;
for(var j = 0; j < 20; j++)
    
for(var i=0; i<1000000; i++){
      seed
=Math.cos(seed+i);
    }
var t2 = System.currentTimeMillis();
print(t2
-t);

BenchMark.groovy
long t=System.currentTimeMillis();
double seed=0.5
20.times{
 
1000000.times{i -> seed = Math.cos(seed + i)}
}
println System.currentTimeMillis() 
- t

我的机器
P4 3G 超线程
内存 1G(这个测试好像和内存没什么关系)

java代码当然需要编译才能运行的,js和groovy是直接解释脚本运行,结果如下
Java 3813
Rhino 34015
Groovy 103422(不知道为什么我这个数值似乎有点比别人的大)
然后我把js和groovy编译成class,结果差不多,(其实我的结果是编译后的groovy和js都要比不编译还要慢),所以把它们编译了意义应该不大。

虽然我这个测试不具有什么现实意义,但是我还是感觉用Groovy(Grails)去做网站不大可行。倒是可以考虑把它们用在不经常被调用,但是代码却要经常变的地方。