我和Groovy代碼的下面的代碼片段一些意想不到的基準測試結果:Groovy的invokedynamic性能
class A{
def n(){
return 1
}
}
class B{
def n(){
return 2
}
}
class C{
def n(){
return 3
}
}
class D{
def n(){
return 4
}
}
def bench(loops){
def a = new A()
def b = new B()
def c = new C()
def d = new D()
def ret=0
for(i=0; i<loops; i++){
ret = ret + getN(a) + getN(b) + getN(c) + getN(d)
}
return ret
}
def getN(clazz){
return clazz.n()
}
我不得不說,我使用的編譯的類文件,並與反射API調用它。講述很長的故事(不要問;)。對於第一印象,我用10回合+5熱身10000迴路。 (junit-benchmark框架) 我的JDK是Verison 1.7.0_09,我使用Groovy 2.1。 我編譯了代碼2次,並且沒有invokedynamic支持。 關鍵是,與invokedynamic的基準比正常編譯的要長得多。 我也做了其他斐波那契數的基準,其行爲像預期的一樣(indy花費了大約一半的時間)。
有人知道這裏有什麼問題嗎?
謝謝。
有沒有可能Groovy,特別是java編譯器,可以內聯添加? – Thorben 2013-05-26 17:39:56