У меня были некоторые неожиданные результаты тестов со следующим фрагментом 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()
}
Я должен сказать, что я использовал скомпилированные файлы класса и вызывается его с Reflection API. Длинная история, чтобы рассказать (не спрашивайте;). Для первых впечатлений я использовал 10 раундов + 5 разминок с 10000 петлями. (junit-benchmark framework) My JDK - Verison 1.7.0_09, и я использовал Groovy 2.1. Я скомпилировал код 2 раза с и без invokedynamic поддержки. Дело в том, что эталон с invokedynamic занял гораздо больше времени, чем обычный скомпилированный. Я также сделал другие тесты с цифрами фибоначчи, которые вели себя как ожидалось (инди заняло около половины времени).
Кто-нибудь знает, что здесь не так?
Спасибо.
Возможно ли, что Groovy, уважительно java-компилятор, может встроить дополнения? – Thorben