首页 文章 设计模式 Groovy 1.6.0 BETA 1 发布了!性能有显著提升!

邮件订阅

Groovy 1.6.0 BETA 1 发布了!性能有显著提升! E-mail
用户评价: / 0
好 
作者:山风小子   
2008-05-04 01:01
Groovy 1.6.0 BETA 1终于发布了,除了一些BUG修正外,最令人兴奋的是,Groovy的运行效率有了显著的提升。官方用Great Language Shootout的基准测试得出Groovy 1.6.0 BETA 1的性能相比Groovy 1.5.6 GA,提升了150%~460%。

眼见为实,耳听为虚,我自己也做了一个相对简单的性能测试:

利用Groovy 1.6.0 BETA 1将下面解决八皇后问题的代码执行10次,结果如下:
????????????????????? 1???? 2???? 3???? 4???? 5???? 6???? 7???? 8???? 9??? 10??????????? AVG
Groovy1.5.6GA?? :? 1360? 1156?? 969? 1000? 1063? 1110?? 938? 1046? 1031?? 954???????? 1062.7
Groovy1.6.0BETA1:?? 187?? 171?? 141 ? 109 ? 187 ? 156 ? 172 ? 141 ? 203 ? 187????????? 165.4

经过计算,Groovy1.6.0BETA1的性能相比Groovy1.5.6GA,提升了542.5%


如果是普通应用程序代码的话,提升的幅度会小一点。


此外,Groovy1.6.0BETA1还支持Multiple assignments(多重赋值)
def?listOfN(numOfElem)?{?
????
1..numOfElem?
}

def?a,?b
[a,?b]?
=?listOfN(1)?
assert?a?==?1
assert?b?==?null

[a,?b]?
=?listOfN(10)?
assert?a?==?1
assert?b?==?2

[a,?b]?
=?[b,?a]
assert?a?==?2
assert?b?==?1

还支持Annotations的定义,(在Groovy 1.6.0之前,Annotations的定义只能放在Java代码中):
@interface?Cachable?{
????String?cache()
}

最后一个值得关注的新特性就是引入@Bindable这个Annotation
具体使用方法请参考: Groovy高效编程——@Bindable的使用


八皇后问题代码:
q = 8
i = new int[q]
count = 0

def scan(n){
??? if (n == q){
??????? println(i.toList())
??????? count++
??????? return
??? }
??? i[n]=0
??? while (i[n] < q){
??????? i[n] = i[n]+1
??????? if (check(n))
??????????? scan(n + 1)
??? }
}
def check(n){
??? if (n > 0)
??????? for (j in 0..<n)
??????????? if (i[j] == i[n] || i[j] - i[n] == j - n || i[j] - i[n] == n - j)
??????????????? return false
??? return true
}

long t1 = System.currentTimeMillis()
scan(0)
long t2 = System.currentTimeMillis()
println("total time:" + ( t2 - t1))? // 耗时
println("total results:" + count)

下载地址:http://dist.groovy.codehaus.org/distributions/groovy-binary-1.6-beta-1.zip

附:朝花夕拾——Groovy & Grails
最后更新于: 2008-05-04 01:01
 

欢迎转载

本站文章欢迎转载,但请注明出处(http://www.javajia.com,Java家)