Groovy 2.0 刚刚发布没多久,该版本包含很多新特性,诸如静态编译的特性对性能改进非常明显。
我使用 Groovy 有很多年了,一直耿耿于怀的是 Groovy 缺少 JVM 中的静态编译。因此 Groovy 代码在性能上完全无法跟纯 Java 代码相比。这也是限制 Groovy 在很多对性能要求较高实际项目中的应用。
所以当 Groovy 2.0 发布,我就注意到了新的静态代码编译的新特性,然后我决定对这个特性进行性能上的测试,刚好我前几天发现了一个很棒的 Groovy 性能测试工具 GBench,可很方便的编写性能测试。
这里是使用 GBench 对动态和静态 Groovy 代码进行性能比较的代码:
@Grab('com.googlecode.gbench:gbench:0.3.0-groovy-2.0')
import gbench.BenchmarkBuilder
import groovy.transform.CompileStatic
int fib(int n) {
if (n < 2) return n
return fib(n - 1) + fib(n - 2)
}
@CompileStatic
int fib2(int n) {
if (n < 2) return n
return fib2(n - 1) + fib2(n - 2)
}
new BenchmarkBuilder().run {
int n = 20
"Normal Version" { fib n }
"@CompileStatic Version" { fib2 n }
}.prettyPrint()
你可以使用 Groovy Console 来执行上面代码,结果如下:
从上图执行结果我们可以看到静态代码版本的 fibonacci 函数执行速度是动态代码版本的 3 倍。
关于 Groovy 2.0 的静态代码编译和代码检查请看:Groovy 2.0 新特性之:静态类型检查