早就聽說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)去做網站不大可行。倒是可以考慮把它們用在不經常被調用,但是代碼卻要經常變的地方。