Überlegungen zur Leistung von Groovy-Sammlungen in Bezug auf Raum / Zeit

Was ist die Leistung von Groovys Erfassungsmethoden (in Bezug auf Platz (!) Und Zeit) im Vergleich zu einfachen Java-for-Loops?

ZB für diese Anwendungsfälle:

sum () vs. for-Schleife mit Variableeach () vs. for-Schleife mit Variableinject () vs. for-Schleife mit Variablecollect () vs. for-Schleife mit temporärer SammlungfindAll () vs. for-Schleife mit temporärer Sammlungfind () vs. for-Schleife mit Variable

Ist es angesichts dieser Ergebnisse ratsam, for-Schleifen über Groovy-Erfassungsmethoden in kritischen Umgebungen (z. B. Grails-WebApp) zu verwenden? Gibt es Ressourcen zur Leistung von Groovy / Grails (Optimierung)?

Mit diesem GBench-Test habe ich folgende Ergebnisse für die CPU-Zeit erhalten:

                 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 = 100,00
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()

Antworten auf die Frage(1)

Ihre Antwort auf die Frage