早就聽說Groovy性能比Java還要差很多,于是一直沒有花心是去研究它,今天在newsgroup中有看到了有人抱怨Groovy的性能。于是自己也做了個測試,同時也把Rhino拉了進(jìn)來。

Rhino是Mozilla的javascript腳本引擎,和Groovy性質(zhì)差不多,但是沒有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

我的機(jī)器
P4 3G 超線程
內(nèi)存 1G(這個測試好像和內(nèi)存沒什么關(guān)系)

java代碼當(dāng)然需要編譯才能運(yùn)行的,js和groovy是直接解釋腳本運(yùn)行,結(jié)果如下
Java 3813
Rhino 34015
Groovy 103422(不知道為什么我這個數(shù)值似乎有點(diǎn)比別人的大)
然后我把js和groovy編譯成class,結(jié)果差不多,(其實(shí)我的結(jié)果是編譯后的groovy和js都要比不編譯還要慢),所以把它們編譯了意義應(yīng)該不大。

雖然我這個測試不具有什么現(xiàn)實(shí)意義,但是我還是感覺用Groovy(Grails)去做網(wǎng)站不大可行。倒是可以考慮把它們用在不經(jīng)常被調(diào)用,但是代碼卻要經(jīng)常變的地方。