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 新特性之:靜態類型檢查