早就聽說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)常變的地方。