Особенности производительности Groovy-коллекций в отношении пространства / времени
Какова производительность методов сбора Groovys (в отношении пространства (!) И времени) по сравнению с простыми циклами for for Java?
Например, для этих случаев использования:
сумма () против цикла for с переменнойкаждый () против цикла с переменнойinject () против цикла for с переменнойcollect () против цикла for с временной коллекциейfindAll () против цикла for с временной коллекциейfind () против цикла for с переменнойИтак, учитывая эти результаты, целесообразно ли использовать циклы for поверх методов Groovy-collection в критических средах (например, Grails-WebApp)? Есть ли ресурсы, касающиеся производительности Groovy / Grails (оптимизация)?
Используя этот тест GBench, я получил следующие результаты для процессорного времени:
user system cpu real
forLoop 2578777 67 2578844 2629592
forEachLoop 2027941 47 2027988 2054320
groovySum 3946137 91 3946228 3958705
groovyEach 4703000 0 4703000 4703000
groovyInject 4280792 108 4280900 4352287
import groovyx.gbench.BenchmarkBuilder
def testSize = 10000
def testSet = (0..testSize) as Set
def bm = new BenchmarkBuilder().run {
'forLoop' {
def n = 0
for(int i = 0; i<testSize; i++) {
n += i
}
return n
}
'forEachLoop' {
def n = 0
for(int i in testSet) {
n += i
}
return n
}
'groovySum' {
def n = testSet.sum()
return n
}
'groovyEach' {
def n = 0
testSet.each { n + it }
return n
}
'groovyInject' {
def n = testSet.inject(0) { el, sum -> sum + el }
return n
}
}
bm.prettyPrint()