[
https://issues.apache.org/jira/browse/GROOVY-10307?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18061010#comment-18061010
]
Paul King edited comment on GROOVY-10307 at 2/26/26 12:06 PM:
--------------------------------------------------------------
Here are the benchmark results for indy without PR#2377:
{noformat}
> ./gradlew perf:jmh
Benchmark (indy=true default, PR#2377=false master)
(n) Mode Cnt Score Error Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
N/A thrpt 10 112364.869 ± 2270.419 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy
N/A thrpt 10 6953.141 ± 385.617 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS
N/A thrpt 10 29756.901 ± 111.947 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java
N/A thrpt 10 7777.059 ± 41.281 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy
N/A thrpt 10 927.378 ± 25.783 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS
N/A thrpt 10 25953.047 ± 112.931 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java
N/A thrpt 10 8456.179 ± 327.093 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy
N/A thrpt 10 857.928 ± 23.874 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS
N/A thrpt 10 26418.202 ± 942.994 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java
N/A thrpt 10 7465.529 ± 312.658 ops/ms
o.a.g.bench.AckermannBench.groovy
5 avgt 10 0.212 ± 0.005 ms/op
o.a.g.bench.AckermannBench.groovy
6 avgt 10 0.933 ± 0.002 ms/op
o.a.g.bench.AckermannBench.groovy
7 avgt 10 4.081 ± 0.091 ms/op
o.a.g.bench.AckermannBench.groovy
8 avgt 10 16.844 ± 0.176 ms/op
o.a.g.bench.AckermannBench.java
5 avgt 10 0.048 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
6 avgt 10 0.236 ± 0.003 ms/op
o.a.g.bench.AckermannBench.java
7 avgt 10 1.044 ± 0.009 ms/op
o.a.g.bench.AckermannBench.java
8 avgt 10 4.356 ± 0.021 ms/op
o.a.g.bench.AryBench.groovy
10 avgt 10 0.204 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
100 avgt 10 1.934 ± 0.028 ms/op
o.a.g.bench.AryBench.groovy
1000 avgt 10 21.849 ± 0.943 ms/op
o.a.g.bench.AryBench.groovy
1000000 avgt 10 19271.100 ± 2891.890 ms/op
o.a.g.bench.AryBench.groovyCS
10 avgt 10 0.003 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000000 avgt 10 84.977 ± 0.412 ms/op
o.a.g.bench.AryBench.java
10 avgt 10 0.002 ± 0.001 ms/op
o.a.g.bench.AryBench.java
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000000 avgt 10 85.669 ± 0.616 ms/op
o.a.g.bench.FiboBench.groovy
30 avgt 10 6.641 ± 0.425 ms/op
o.a.g.bench.FiboBench.groovy
31 avgt 10 10.350 ± 0.103 ms/op
o.a.g.bench.FiboBench.groovy
32 avgt 10 16.767 ± 0.138 ms/op
o.a.g.bench.FiboBench.groovy
33 avgt 10 28.188 ± 1.771 ms/op
o.a.g.bench.FiboBench.groovy
34 avgt 10 43.933 ± 0.512 ms/op
o.a.g.bench.FiboBench.java
30 avgt 10 1.299 ± 0.013 ms/op
o.a.g.bench.FiboBench.java
31 avgt 10 2.099 ± 0.032 ms/op
o.a.g.bench.FiboBench.java
32 avgt 10 3.431 ± 0.055 ms/op
o.a.g.bench.FiboBench.java
33 avgt 10 5.480 ± 0.064 ms/op
o.a.g.bench.FiboBench.java
34 avgt 10 8.858 ± 0.118 ms/op
o.a.g.perf.ClosureBench.closureAsParameter
N/A avgt 10 15.483 ± 0.135 ms/op
o.a.g.perf.ClosureBench.closureCallMethod
N/A avgt 10 7.148 ± 0.141 ms/op
o.a.g.perf.ClosureBench.closureComposition
N/A avgt 10 31.757 ± 0.257 ms/op
o.a.g.perf.ClosureBench.closureDelegation
N/A avgt 10 17.227 ± 0.611 ms/op
o.a.g.perf.ClosureBench.closureModifyCapture
N/A avgt 10 3.213 ± 0.041 ms/op
o.a.g.perf.ClosureBench.closureMultiParams
N/A avgt 10 12.929 ± 0.444 ms/op
o.a.g.perf.ClosureBench.closureReuse
N/A avgt 10 7.107 ± 0.151 ms/op
o.a.g.perf.ClosureBench.closureSpread
N/A avgt 10 733.508 ± 13.875 ms/op
o.a.g.perf.ClosureBench.closureTrampoline
N/A avgt 10 16.596 ± 0.443 ms/op
o.a.g.perf.ClosureBench.closureWithCapture
N/A avgt 10 7.104 ± 0.062 ms/op
o.a.g.perf.ClosureBench.collectWithClosure
N/A avgt 10 19.737 ± 0.183 ms/op
o.a.g.perf.ClosureBench.curriedClosure
N/A avgt 10 40.973 ± 2.033 ms/op
o.a.g.perf.ClosureBench.eachWithClosure
N/A avgt 10 19.040 ± 0.529 ms/op
o.a.g.perf.ClosureBench.findAllWithClosure
N/A avgt 10 25.565 ± 0.672 ms/op
o.a.g.perf.ClosureBench.injectWithClosure
N/A avgt 10 19.856 ± 0.491 ms/op
o.a.g.perf.ClosureBench.methodReference
N/A avgt 10 36.765 ± 4.051 ms/op
o.a.g.perf.ClosureBench.nestedClosures
N/A avgt 10 18.067 ± 0.118 ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure
N/A avgt 10 36.137 ± 0.217 ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation
N/A avgt 10 12.121 ± 0.084 ms/op
o.a.g.perf.GStringBench.gstringAsMapKey
N/A avgt 10 153.910 ± 12.566 ms/op
o.a.g.perf.GStringBench.multiValueInterpolation
N/A avgt 10 126.857 ± 5.302 ms/op
o.a.g.perf.GStringBench.repeatedToString
N/A avgt 10 3.537 ± 0.020 ms/op
o.a.g.perf.GStringBench.simpleInterpolation
N/A avgt 10 52.101 ± 0.885 ms/op
o.a.g.perf.GStringBench.stringConcatBaseline
N/A avgt 10 25.818 ± 0.878 ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet
N/A avgt 10 65.678 ± 2.600 ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger
N/A avgt 10 29.718 ± 0.630 ms/op
o.a.g.perf.GroovyIdiomBench.asToString
N/A avgt 10 20.630 ± 0.281 ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline
N/A avgt 10 15.974 ± 0.116 ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString
N/A avgt 10 5.407 ± 0.036 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull
N/A avgt 10 5.143 ± 0.170 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull
N/A avgt 10 2.446 ± 0.057 ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline
N/A avgt 10 3.943 ± 0.029 ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains
N/A avgt 10 25.401 ± 0.205 ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation
N/A avgt 10 4.274 ± 0.108 ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration
N/A avgt 10 14.472 ± 0.647 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull
N/A avgt 10 7.874 ± 0.173 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull
N/A avgt 10 2.424 ± 0.024 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod
N/A avgt 10 21.075 ± 0.578 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty
N/A avgt 10 89.471 ± 5.681 ms/op
o.a.g.perf.GroovyIdiomBench.tapScope
N/A avgt 10 292.009 ± 6.113 ms/op
o.a.g.perf.GroovyIdiomBench.withScope
N/A avgt 10 65.757 ± 2.688 ms/op
o.a.g.perf.LoopsBench.eachIdentity
N/A avgt 10 27.696 ± 2.747 ms/op
o.a.g.perf.LoopsBench.methodCallInLoop
N/A avgt 10 3.738 ± 0.062 ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure
N/A avgt 10 52.077 ± 2.409 ms/op
o.a.g.perf.LoopsBench.originalEachToString
N/A avgt 10 31.483 ± 0.106 ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop
N/A avgt 10 3.888 ± 0.019 ms/op
o.a.g.perf.MetaclassBench.methodCallsWithMetaclassChanges
N/A avgt 10 4430.558 ± 191.501 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls
N/A avgt 10 2.726 ± 0.024 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls
N/A avgt 10 2.600 ± 0.036 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject
N/A avgt 10 9.256 ± 0.211 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams
N/A avgt 10 7.239 ± 0.325 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite
N/A avgt 10 32.604 ± 0.567 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite
N/A avgt 10 1419.558 ± 23.269 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls
N/A avgt 10 2.646 ± 0.021 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls
N/A avgt 10 2.367 ± 0.026 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams
N/A avgt 10 7.133 ± 0.145 ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic
N/A avgt 10 7.304 ± 0.170 ms/op
o.a.g.perf.OperatorBench.comparisonOperators
N/A avgt 10 1.712 ± 0.006 ms/op
o.a.g.perf.OperatorBench.equalsOperator
N/A avgt 10 1.648 ± 0.008 ms/op
o.a.g.perf.OperatorBench.inOperator
N/A avgt 10 41.315 ± 0.836 ms/op
o.a.g.perf.OperatorBench.integerMultiply
N/A avgt 10 12.644 ± 0.235 ms/op
o.a.g.perf.OperatorBench.integerPlus
N/A avgt 10 2.309 ± 0.079 ms/op
o.a.g.perf.OperatorBench.listGetAt
N/A avgt 10 11.881 ± 4.153 ms/op
o.a.g.perf.OperatorBench.listLeftShift
N/A avgt 10 15.423 ± 0.108 ms/op
o.a.g.perf.OperatorBench.listPutAt
N/A avgt 10 13.721 ± 0.394 ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt
N/A avgt 10 59.526 ± 1.639 ms/op
o.a.g.perf.OperatorBench.spaceshipOperator
N/A avgt 10 6.052 ± 0.029 ms/op
o.a.g.perf.OperatorBench.stringMultiply
N/A avgt 10 10.334 ± 0.167 ms/op
o.a.g.perf.OperatorBench.unaryMinus
N/A avgt 10 2.603 ± 0.025 ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess
N/A avgt 10 8.276 ± 0.166 ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess
N/A avgt 10 111.725 ± 15.802 ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite
N/A avgt 10 2.608 ± 0.042 ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess
N/A avgt 10 125.096 ± 2.121 ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess
N/A avgt 10 19.904 ± 1.285 ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess
N/A avgt 10 30.564 ± 0.345 ms/op
o.a.g.perf.RunnerRegistryBench.listIterator
N/A avgt 10 ≈ 10⁻⁶ ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator
N/A avgt 10 ≈ 10⁻⁵ ms/op
{noformat}
And with PR#2377:
{noformat}
> ./gradlew perf:jmh
Benchmark (indy=true default, PR#2377=true)
(n) Mode Cnt Score Error Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
N/A thrpt 10 117464.641 ± 1864.294 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy
N/A thrpt 10 7139.181 ± 803.997 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS
N/A thrpt 10 30180.090 ± 127.936 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java
N/A thrpt 10 7917.845 ± 18.575 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy
N/A thrpt 10 945.122 ± 22.528 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS
N/A thrpt 10 26287.492 ± 128.425 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java
N/A thrpt 10 8538.559 ± 655.050 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy
N/A thrpt 10 854.628 ± 26.933 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS
N/A thrpt 10 23832.120 ± 5568.534 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java
N/A thrpt 10 7655.645 ± 349.744 ops/ms
o.a.g.bench.AckermannBench.groovy
5 avgt 10 0.202 ± 0.003 ms/op
o.a.g.bench.AckermannBench.groovy
6 avgt 10 0.871 ± 0.010 ms/op
o.a.g.bench.AckermannBench.groovy
7 avgt 10 3.956 ± 0.143 ms/op
o.a.g.bench.AckermannBench.groovy
8 avgt 10 16.060 ± 0.139 ms/op
o.a.g.bench.AckermannBench.java
5 avgt 10 0.047 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
6 avgt 10 0.233 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
7 avgt 10 1.026 ± 0.003 ms/op
o.a.g.bench.AckermannBench.java
8 avgt 10 4.302 ± 0.014 ms/op
o.a.g.bench.AryBench.groovy
10 avgt 10 0.200 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
100 avgt 10 1.935 ± 0.018 ms/op
o.a.g.bench.AryBench.groovy
1000 avgt 10 21.945 ± 0.578 ms/op
o.a.g.bench.AryBench.groovy
1000000 avgt 10 20929.337 ± 247.818 ms/op
o.a.g.bench.AryBench.groovyCS
10 avgt 10 0.003 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000000 avgt 10 83.828 ± 0.512 ms/op
o.a.g.bench.AryBench.java
10 avgt 10 0.003 ± 0.001 ms/op
o.a.g.bench.AryBench.java
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000000 avgt 10 84.372 ± 0.774 ms/op
o.a.g.bench.FiboBench.groovy
30 avgt 10 6.322 ± 0.049 ms/op
o.a.g.bench.FiboBench.groovy
31 avgt 10 10.222 ± 0.100 ms/op
o.a.g.bench.FiboBench.groovy
32 avgt 10 16.539 ± 0.138 ms/op
o.a.g.bench.FiboBench.groovy
33 avgt 10 26.769 ± 0.256 ms/op
o.a.g.bench.FiboBench.groovy
34 avgt 10 45.207 ± 3.259 ms/op
o.a.g.bench.FiboBench.java
30 avgt 10 1.288 ± 0.019 ms/op
o.a.g.bench.FiboBench.java
31 avgt 10 2.294 ± 0.363 ms/op
o.a.g.bench.FiboBench.java
32 avgt 10 3.421 ± 0.043 ms/op
o.a.g.bench.FiboBench.java
33 avgt 10 5.388 ± 0.125 ms/op
o.a.g.bench.FiboBench.java
34 avgt 10 10.673 ± 0.221 ms/op
o.a.g.perf.ClosureBench.closureAsParameter
N/A avgt 10 15.055 ± 0.205 ms/op
o.a.g.perf.ClosureBench.closureCallMethod
N/A avgt 10 6.591 ± 0.061 ms/op
o.a.g.perf.ClosureBench.closureComposition
N/A avgt 10 31.076 ± 0.150 ms/op
o.a.g.perf.ClosureBench.closureDelegation
N/A avgt 10 17.398 ± 0.238 ms/op
o.a.g.perf.ClosureBench.closureModifyCapture
N/A avgt 10 3.141 ± 0.035 ms/op
o.a.g.perf.ClosureBench.closureMultiParams
N/A avgt 10 12.818 ± 1.438 ms/op
o.a.g.perf.ClosureBench.closureReuse
N/A avgt 10 6.446 ± 0.035 ms/op
o.a.g.perf.ClosureBench.closureSpread
N/A avgt 10 704.927 ± 3.764 ms/op
o.a.g.perf.ClosureBench.closureTrampoline
N/A avgt 10 16.749 ± 0.889 ms/op
o.a.g.perf.ClosureBench.closureWithCapture
N/A avgt 10 6.941 ± 0.061 ms/op
o.a.g.perf.ClosureBench.collectWithClosure
N/A avgt 10 18.564 ± 0.325 ms/op
o.a.g.perf.ClosureBench.curriedClosure
N/A avgt 10 39.186 ± 0.152 ms/op
o.a.g.perf.ClosureBench.eachWithClosure
N/A avgt 10 19.246 ± 0.077 ms/op
o.a.g.perf.ClosureBench.findAllWithClosure
N/A avgt 10 25.719 ± 2.384 ms/op
o.a.g.perf.ClosureBench.injectWithClosure
N/A avgt 10 19.974 ± 0.542 ms/op
o.a.g.perf.ClosureBench.methodReference
N/A avgt 10 32.152 ± 0.396 ms/op
o.a.g.perf.ClosureBench.nestedClosures
N/A avgt 10 17.752 ± 0.662 ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure
N/A avgt 10 37.425 ± 0.933 ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation
N/A avgt 10 12.416 ± 0.152 ms/op
o.a.g.perf.GStringBench.gstringAsMapKey
N/A avgt 10 163.912 ± 8.329 ms/op
o.a.g.perf.GStringBench.multiValueInterpolation
N/A avgt 10 131.625 ± 4.045 ms/op
o.a.g.perf.GStringBench.repeatedToString
N/A avgt 10 3.341 ± 0.238 ms/op
o.a.g.perf.GStringBench.simpleInterpolation
N/A avgt 10 51.518 ± 1.086 ms/op
o.a.g.perf.GStringBench.stringConcatBaseline
N/A avgt 10 25.848 ± 1.451 ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet
N/A avgt 10 68.021 ± 0.932 ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger
N/A avgt 10 29.517 ± 0.128 ms/op
o.a.g.perf.GroovyIdiomBench.asToString
N/A avgt 10 20.456 ± 0.402 ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline
N/A avgt 10 15.526 ± 0.305 ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString
N/A avgt 10 4.653 ± 0.494 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull
N/A avgt 10 4.769 ± 0.456 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull
N/A avgt 10 2.342 ± 0.039 ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline
N/A avgt 10 4.051 ± 0.188 ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains
N/A avgt 10 26.188 ± 0.173 ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation
N/A avgt 10 4.231 ± 0.038 ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration
N/A avgt 10 14.713 ± 0.737 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull
N/A avgt 10 6.172 ± 0.216 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull
N/A avgt 10 2.407 ± 0.003 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod
N/A avgt 10 20.458 ± 0.651 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty
N/A avgt 10 89.998 ± 5.433 ms/op
o.a.g.perf.GroovyIdiomBench.tapScope
N/A avgt 10 340.204 ± 89.330 ms/op
o.a.g.perf.GroovyIdiomBench.withScope
N/A avgt 10 66.266 ± 1.042 ms/op
o.a.g.perf.LoopsBench.eachIdentity
N/A avgt 10 29.737 ± 0.257 ms/op
o.a.g.perf.LoopsBench.methodCallInLoop
N/A avgt 10 3.743 ± 0.043 ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure
N/A avgt 10 52.581 ± 2.116 ms/op
o.a.g.perf.LoopsBench.originalEachToString
N/A avgt 10 31.946 ± 0.746 ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop
N/A avgt 10 3.696 ± 0.013 ms/op
o.a.g.perf.MetaclassBench.methodCallsWithMetaclassChanges
N/A avgt 10 3701.989 ± 146.825 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls
N/A avgt 10 2.776 ± 0.017 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls
N/A avgt 10 2.617 ± 0.045 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject
N/A avgt 10 9.319 ± 0.061 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams
N/A avgt 10 7.148 ± 0.611 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite
N/A avgt 10 32.422 ± 0.211 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite
N/A avgt 10 1280.007 ± 37.721 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls
N/A avgt 10 2.641 ± 0.005 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls
N/A avgt 10 2.379 ± 0.021 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams
N/A avgt 10 7.149 ± 0.072 ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic
N/A avgt 10 7.305 ± 0.142 ms/op
o.a.g.perf.OperatorBench.comparisonOperators
N/A avgt 10 1.719 ± 0.012 ms/op
o.a.g.perf.OperatorBench.equalsOperator
N/A avgt 10 1.658 ± 0.008 ms/op
o.a.g.perf.OperatorBench.inOperator
N/A avgt 10 41.716 ± 0.208 ms/op
o.a.g.perf.OperatorBench.integerMultiply
N/A avgt 10 12.613 ± 0.521 ms/op
o.a.g.perf.OperatorBench.integerPlus
N/A avgt 10 2.341 ± 0.067 ms/op
o.a.g.perf.OperatorBench.listGetAt
N/A avgt 10 11.911 ± 4.161 ms/op
o.a.g.perf.OperatorBench.listLeftShift
N/A avgt 10 15.622 ± 0.234 ms/op
o.a.g.perf.OperatorBench.listPutAt
N/A avgt 10 13.225 ± 0.929 ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt
N/A avgt 10 56.781 ± 4.173 ms/op
o.a.g.perf.OperatorBench.spaceshipOperator
N/A avgt 10 6.136 ± 0.023 ms/op
o.a.g.perf.OperatorBench.stringMultiply
N/A avgt 10 10.568 ± 0.213 ms/op
o.a.g.perf.OperatorBench.unaryMinus
N/A avgt 10 2.626 ± 0.016 ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess
N/A avgt 10 8.002 ± 0.150 ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess
N/A avgt 10 119.168 ± 10.152 ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite
N/A avgt 10 2.650 ± 0.077 ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess
N/A avgt 10 124.002 ± 13.969 ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess
N/A avgt 10 25.357 ± 8.149 ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess
N/A avgt 10 30.876 ± 0.595 ms/op
o.a.g.perf.RunnerRegistryBench.listIterator
N/A avgt 10 ≈ 10⁻⁶ ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator
N/A avgt 10 ≈ 10⁻⁵ ms/op
{noformat}
Here are the benchmark results for classic bytecode without PR#2377:
{noformat}
> ./gradlew perf:jmh -Pindy=false
Benchmark (indy=false, PR#2377=false master)
(n) Mode Cnt Score Error Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
N/A thrpt 10 88996.544 ± 13076.596 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy
N/A thrpt 10 4702.819 ± 58.355 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS
N/A thrpt 10 30179.178 ± 188.463 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java
N/A thrpt 10 7849.083 ± 45.180 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy
N/A thrpt 10 626.986 ± 125.439 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS
N/A thrpt 10 27094.339 ± 477.969 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java
N/A thrpt 10 8413.162 ± 335.027 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy
N/A thrpt 10 504.555 ± 24.981 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS
N/A thrpt 10 26814.544 ± 1010.107 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java
N/A thrpt 10 7715.771 ± 199.441 ops/ms
o.a.g.bench.AckermannBench.groovy
5 avgt 10 0.085 ± 0.001 ms/op
o.a.g.bench.AckermannBench.groovy
6 avgt 10 0.390 ± 0.001 ms/op
o.a.g.bench.AckermannBench.groovy
7 avgt 10 1.676 ± 0.003 ms/op
o.a.g.bench.AckermannBench.groovy
8 avgt 10 6.965 ± 0.016 ms/op
o.a.g.bench.AckermannBench.java
5 avgt 10 0.047 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
6 avgt 10 0.232 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
7 avgt 10 1.029 ± 0.003 ms/op
o.a.g.bench.AckermannBench.java
8 avgt 10 4.315 ± 0.010 ms/op
o.a.g.bench.AryBench.groovy
10 avgt 10 0.004 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
1000000 avgt 10 83.965 ± 0.455 ms/op
o.a.g.bench.AryBench.groovyCS
10 avgt 10 0.004 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000000 avgt 10 83.842 ± 0.341 ms/op
o.a.g.bench.AryBench.java
10 avgt 10 0.003 ± 0.001 ms/op
o.a.g.bench.AryBench.java
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000 avgt 10 0.048 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000000 avgt 10 84.069 ± 0.531 ms/op
o.a.g.bench.FiboBench.groovy
30 avgt 10 3.771 ± 0.010 ms/op
o.a.g.bench.FiboBench.groovy
31 avgt 10 6.112 ± 0.034 ms/op
o.a.g.bench.FiboBench.groovy
32 avgt 10 9.857 ± 0.032 ms/op
o.a.g.bench.FiboBench.groovy
33 avgt 10 16.020 ± 0.097 ms/op
o.a.g.bench.FiboBench.groovy
34 avgt 10 25.842 ± 0.098 ms/op
o.a.g.bench.FiboBench.java
30 avgt 10 1.238 ± 0.022 ms/op
o.a.g.bench.FiboBench.java
31 avgt 10 2.008 ± 0.053 ms/op
o.a.g.bench.FiboBench.java
32 avgt 10 3.230 ± 0.053 ms/op
o.a.g.bench.FiboBench.java
33 avgt 10 5.253 ± 0.088 ms/op
o.a.g.bench.FiboBench.java
34 avgt 10 9.524 ± 1.316 ms/op
o.a.g.perf.ClosureBench.closureAsParameter
N/A avgt 10 32.897 ± 0.575 ms/op
o.a.g.perf.ClosureBench.closureCallMethod
N/A avgt 10 17.860 ± 0.709 ms/op
o.a.g.perf.ClosureBench.closureComposition
N/A avgt 10 38.535 ± 0.805 ms/op
o.a.g.perf.ClosureBench.closureDelegation
N/A avgt 10 30.083 ± 1.173 ms/op
o.a.g.perf.ClosureBench.closureModifyCapture
N/A avgt 10 19.930 ± 0.239 ms/op
o.a.g.perf.ClosureBench.closureMultiParams
N/A avgt 10 27.697 ± 0.569 ms/op
o.a.g.perf.ClosureBench.closureReuse
N/A avgt 10 18.122 ± 0.296 ms/op
o.a.g.perf.ClosureBench.closureSpread
N/A avgt 10 36.910 ± 0.296 ms/op
o.a.g.perf.ClosureBench.closureTrampoline
N/A avgt 10 19.950 ± 0.353 ms/op
o.a.g.perf.ClosureBench.closureWithCapture
N/A avgt 10 17.490 ± 0.152 ms/op
o.a.g.perf.ClosureBench.collectWithClosure
N/A avgt 10 18.481 ± 0.168 ms/op
o.a.g.perf.ClosureBench.curriedClosure
N/A avgt 10 43.492 ± 0.267 ms/op
o.a.g.perf.ClosureBench.eachWithClosure
N/A avgt 10 18.084 ± 0.157 ms/op
o.a.g.perf.ClosureBench.findAllWithClosure
N/A avgt 10 23.424 ± 0.533 ms/op
o.a.g.perf.ClosureBench.injectWithClosure
N/A avgt 10 21.583 ± 0.327 ms/op
o.a.g.perf.ClosureBench.methodReference
N/A avgt 10 37.259 ± 0.446 ms/op
o.a.g.perf.ClosureBench.nestedClosures
N/A avgt 10 43.917 ± 0.276 ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure
N/A avgt 10 40.359 ± 0.312 ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation
N/A avgt 10 24.719 ± 0.165 ms/op
o.a.g.perf.GStringBench.gstringAsMapKey
N/A avgt 10 134.441 ± 34.617 ms/op
o.a.g.perf.GStringBench.multiValueInterpolation
N/A avgt 10 76.971 ± 7.279 ms/op
o.a.g.perf.GStringBench.repeatedToString
N/A avgt 10 5.124 ± 0.023 ms/op
o.a.g.perf.GStringBench.simpleInterpolation
N/A avgt 10 55.126 ± 2.229 ms/op
o.a.g.perf.GStringBench.stringConcatBaseline
N/A avgt 10 25.367 ± 1.063 ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet
N/A avgt 10 85.289 ± 3.442 ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger
N/A avgt 10 29.717 ± 0.934 ms/op
o.a.g.perf.GroovyIdiomBench.asToString
N/A avgt 10 35.559 ± 1.257 ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline
N/A avgt 10 19.161 ± 0.129 ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString
N/A avgt 10 16.170 ± 0.188 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull
N/A avgt 10 16.715 ± 1.211 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull
N/A avgt 10 3.754 ± 0.016 ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline
N/A avgt 10 14.932 ± 0.262 ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains
N/A avgt 10 22.805 ± 1.007 ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation
N/A avgt 10 4.450 ± 0.036 ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration
N/A avgt 10 15.481 ± 0.178 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull
N/A avgt 10 36.210 ± 1.055 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull
N/A avgt 10 6.143 ± 0.022 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod
N/A avgt 10 19.854 ± 0.312 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty
N/A avgt 10 73.401 ± 25.851 ms/op
o.a.g.perf.GroovyIdiomBench.tapScope
N/A avgt 10 304.375 ± 4.663 ms/op
o.a.g.perf.GroovyIdiomBench.withScope
N/A avgt 10 77.451 ± 3.752 ms/op
o.a.g.perf.LoopsBench.eachIdentity
N/A avgt 10 30.676 ± 0.115 ms/op
o.a.g.perf.LoopsBench.methodCallInLoop
N/A avgt 10 7.854 ± 0.077 ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure
N/A avgt 10 56.691 ± 0.417 ms/op
o.a.g.perf.LoopsBench.originalEachToString
N/A avgt 10 33.426 ± 0.361 ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop
N/A avgt 10 17.161 ± 0.070 ms/op
o.a.g.perf.MetaclassBench.methodCallsWithMetaclassChanges
N/A avgt 10 239.412 ± 15.624 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls
N/A avgt 10 3.986 ± 0.016 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls
N/A avgt 10 3.853 ± 0.011 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject
N/A avgt 10 11.326 ± 0.119 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams
N/A avgt 10 1.055 ± 0.003 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite
N/A avgt 10 21.007 ± 1.323 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite
N/A avgt 10 196.385 ± 4.634 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls
N/A avgt 10 0.893 ± 0.010 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls
N/A avgt 10 0.791 ± 0.005 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams
N/A avgt 10 1.051 ± 0.016 ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic
N/A avgt 10 4.104 ± 0.055 ms/op
o.a.g.perf.OperatorBench.comparisonOperators
N/A avgt 10 ≈ 10⁻⁵ ms/op
o.a.g.perf.OperatorBench.equalsOperator
N/A avgt 10 ≈ 10⁻⁵ ms/op
o.a.g.perf.OperatorBench.inOperator
N/A avgt 10 40.616 ± 1.362 ms/op
o.a.g.perf.OperatorBench.integerMultiply
N/A avgt 10 7.940 ± 0.079 ms/op
o.a.g.perf.OperatorBench.integerPlus
N/A avgt 10 0.268 ± 0.002 ms/op
o.a.g.perf.OperatorBench.listGetAt
N/A avgt 10 16.791 ± 0.537 ms/op
o.a.g.perf.OperatorBench.listLeftShift
N/A avgt 10 9.625 ± 0.224 ms/op
o.a.g.perf.OperatorBench.listPutAt
N/A avgt 10 13.286 ± 0.410 ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt
N/A avgt 10 58.392 ± 1.995 ms/op
o.a.g.perf.OperatorBench.spaceshipOperator
N/A avgt 10 2.593 ± 0.031 ms/op
o.a.g.perf.OperatorBench.stringMultiply
N/A avgt 10 11.236 ± 0.501 ms/op
o.a.g.perf.OperatorBench.unaryMinus
N/A avgt 10 3.586 ± 0.098 ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess
N/A avgt 10 18.392 ± 0.259 ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess
N/A avgt 10 128.542 ± 2.474 ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite
N/A avgt 10 0.266 ± 0.001 ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess
N/A avgt 10 121.678 ± 6.482 ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess
N/A avgt 10 25.939 ± 0.335 ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess
N/A avgt 10 38.516 ± 1.916 ms/op
o.a.g.perf.RunnerRegistryBench.listIterator
N/A avgt 10 ≈ 10⁻⁶ ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator
N/A avgt 10 ≈ 10⁻⁵ ms/op
{noformat}
Here are the benchmark results for classic bytecode without PR#2377:
{noformat}
Benchmark (indy=false, PR#2377=true)
(n) Mode Cnt Score Error Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
N/A thrpt 10 77368.075 ± 9934.473 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy
N/A thrpt 10 4735.338 ± 31.592 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS
N/A thrpt 10 29881.729 ± 437.146 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java
N/A thrpt 10 7885.366 ± 53.337 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy
N/A thrpt 10 643.545 ± 42.519 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS
N/A thrpt 10 26755.441 ± 934.479 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java
N/A thrpt 10 8587.713 ± 397.453 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy
N/A thrpt 10 489.084 ± 108.545 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS
N/A thrpt 10 25916.296 ± 163.871 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java
N/A thrpt 10 7578.687 ± 265.860 ops/ms
o.a.g.bench.AckermannBench.groovy
5 avgt 10 0.085 ± 0.001 ms/op
o.a.g.bench.AckermannBench.groovy
6 avgt 10 0.393 ± 0.004 ms/op
o.a.g.bench.AckermannBench.groovy
7 avgt 10 1.724 ± 0.111 ms/op
o.a.g.bench.AckermannBench.groovy
8 avgt 10 7.002 ± 0.061 ms/op
o.a.g.bench.AckermannBench.java
5 avgt 10 0.047 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
6 avgt 10 0.237 ± 0.017 ms/op
o.a.g.bench.AckermannBench.java
7 avgt 10 1.031 ± 0.007 ms/op
o.a.g.bench.AckermannBench.java
8 avgt 10 4.327 ± 0.031 ms/op
o.a.g.bench.AryBench.groovy
10 avgt 10 0.004 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovy
1000000 avgt 10 85.264 ± 1.911 ms/op
o.a.g.bench.AryBench.groovyCS
10 avgt 10 0.004 ± 0.002 ms/op
o.a.g.bench.AryBench.groovyCS
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000000 avgt 10 84.614 ± 1.136 ms/op
o.a.g.bench.AryBench.java
10 avgt 10 0.002 ± 0.001 ms/op
o.a.g.bench.AryBench.java
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000000 avgt 10 84.905 ± 2.227 ms/op
o.a.g.bench.FiboBench.groovy
30 avgt 10 3.848 ± 0.124 ms/op
o.a.g.bench.FiboBench.groovy
31 avgt 10 6.167 ± 0.072 ms/op
o.a.g.bench.FiboBench.groovy
32 avgt 10 9.987 ± 0.151 ms/op
o.a.g.bench.FiboBench.groovy
33 avgt 10 16.145 ± 0.185 ms/op
o.a.g.bench.FiboBench.groovy
34 avgt 10 26.124 ± 0.481 ms/op
o.a.g.bench.FiboBench.java
30 avgt 10 1.247 ± 0.028 ms/op
o.a.g.bench.FiboBench.java
31 avgt 10 2.045 ± 0.066 ms/op
o.a.g.bench.FiboBench.java
32 avgt 10 3.342 ± 0.065 ms/op
o.a.g.bench.FiboBench.java
33 avgt 10 5.276 ± 0.056 ms/op
o.a.g.bench.FiboBench.java
34 avgt 10 9.664 ± 1.638 ms/op
o.a.g.perf.ClosureBench.closureAsParameter
N/A avgt 10 32.255 ± 0.237 ms/op
o.a.g.perf.ClosureBench.closureCallMethod
N/A avgt 10 17.549 ± 0.839 ms/op
o.a.g.perf.ClosureBench.closureComposition
N/A avgt 10 36.881 ± 0.335 ms/op
o.a.g.perf.ClosureBench.closureDelegation
N/A avgt 10 28.342 ± 1.934 ms/op
o.a.g.perf.ClosureBench.closureModifyCapture
N/A avgt 10 10.916 ± 0.101 ms/op
o.a.g.perf.ClosureBench.closureMultiParams
N/A avgt 10 27.941 ± 0.331 ms/op
o.a.g.perf.ClosureBench.closureReuse
N/A avgt 10 17.022 ± 0.049 ms/op
o.a.g.perf.ClosureBench.closureSpread
N/A avgt 10 36.588 ± 0.334 ms/op
o.a.g.perf.ClosureBench.closureTrampoline
N/A avgt 10 19.517 ± 0.127 ms/op
o.a.g.perf.ClosureBench.closureWithCapture
N/A avgt 10 17.518 ± 0.082 ms/op
o.a.g.perf.ClosureBench.collectWithClosure
N/A avgt 10 18.507 ± 0.535 ms/op
o.a.g.perf.ClosureBench.curriedClosure
N/A avgt 10 43.592 ± 0.212 ms/op
o.a.g.perf.ClosureBench.eachWithClosure
N/A avgt 10 18.120 ± 0.200 ms/op
o.a.g.perf.ClosureBench.findAllWithClosure
N/A avgt 10 23.399 ± 0.716 ms/op
o.a.g.perf.ClosureBench.injectWithClosure
N/A avgt 10 21.133 ± 0.094 ms/op
o.a.g.perf.ClosureBench.methodReference
N/A avgt 10 37.520 ± 5.371 ms/op
o.a.g.perf.ClosureBench.nestedClosures
N/A avgt 10 44.576 ± 2.524 ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure
N/A avgt 10 43.163 ± 3.506 ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation
N/A avgt 10 24.193 ± 0.199 ms/op
o.a.g.perf.GStringBench.gstringAsMapKey
N/A avgt 10 118.183 ± 3.805 ms/op
o.a.g.perf.GStringBench.multiValueInterpolation
N/A avgt 10 80.867 ± 11.372 ms/op
o.a.g.perf.GStringBench.repeatedToString
N/A avgt 10 5.190 ± 0.180 ms/op
o.a.g.perf.GStringBench.simpleInterpolation
N/A avgt 10 53.482 ± 2.387 ms/op
o.a.g.perf.GStringBench.stringConcatBaseline
N/A avgt 10 24.901 ± 0.508 ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet
N/A avgt 10 87.577 ± 2.036 ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger
N/A avgt 10 28.884 ± 0.226 ms/op
o.a.g.perf.GroovyIdiomBench.asToString
N/A avgt 10 34.708 ± 0.224 ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline
N/A avgt 10 19.107 ± 0.312 ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString
N/A avgt 10 16.445 ± 0.616 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull
N/A avgt 10 17.009 ± 0.489 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull
N/A avgt 10 3.758 ± 0.011 ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline
N/A avgt 10 15.511 ± 1.292 ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains
N/A avgt 10 21.593 ± 0.399 ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation
N/A avgt 10 4.506 ± 0.020 ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration
N/A avgt 10 15.795 ± 0.483 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull
N/A avgt 10 36.642 ± 2.277 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull
N/A avgt 10 6.113 ± 0.042 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod
N/A avgt 10 20.958 ± 0.058 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty
N/A avgt 10 64.598 ± 2.750 ms/op
o.a.g.perf.GroovyIdiomBench.tapScope
N/A avgt 10 326.857 ± 35.262 ms/op
o.a.g.perf.GroovyIdiomBench.withScope
N/A avgt 10 78.150 ± 3.275 ms/op
o.a.g.perf.LoopsBench.eachIdentity
N/A avgt 10 31.573 ± 1.475 ms/op
o.a.g.perf.LoopsBench.methodCallInLoop
N/A avgt 10 7.645 ± 0.367 ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure
N/A avgt 10 56.737 ± 2.176 ms/op
o.a.g.perf.LoopsBench.originalEachToString
N/A avgt 10 33.351 ± 0.694 ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop
N/A avgt 10 17.311 ± 0.227 ms/op
o.a.g.perf.MetaclassBench.methodCallsWithMetaclassChanges
N/A avgt 10 248.055 ± 16.586 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls
N/A avgt 10 3.989 ± 0.010 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls
N/A avgt 10 3.854 ± 0.016 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject
N/A avgt 10 11.234 ± 0.332 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams
N/A avgt 10 1.040 ± 0.014 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite
N/A avgt 10 20.389 ± 0.180 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite
N/A avgt 10 191.182 ± 2.118 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls
N/A avgt 10 0.875 ± 0.001 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls
N/A avgt 10 0.804 ± 0.002 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams
N/A avgt 10 1.035 ± 0.001 ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic
N/A avgt 10 4.045 ± 0.036 ms/op
o.a.g.perf.OperatorBench.comparisonOperators
N/A avgt 10 ≈ 10⁻⁵ ms/op
o.a.g.perf.OperatorBench.equalsOperator
N/A avgt 10 ≈ 10⁻⁵ ms/op
o.a.g.perf.OperatorBench.inOperator
N/A avgt 10 41.894 ± 0.848 ms/op
o.a.g.perf.OperatorBench.integerMultiply
N/A avgt 10 7.830 ± 0.035 ms/op
o.a.g.perf.OperatorBench.integerPlus
N/A avgt 10 0.264 ± 0.001 ms/op
o.a.g.perf.OperatorBench.listGetAt
N/A avgt 10 16.446 ± 0.182 ms/op
o.a.g.perf.OperatorBench.listLeftShift
N/A avgt 10 9.557 ± 0.317 ms/op
o.a.g.perf.OperatorBench.listPutAt
N/A avgt 10 13.018 ± 0.059 ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt
N/A avgt 10 56.347 ± 0.261 ms/op
o.a.g.perf.OperatorBench.spaceshipOperator
N/A avgt 10 2.528 ± 0.009 ms/op
o.a.g.perf.OperatorBench.stringMultiply
N/A avgt 10 10.867 ± 0.434 ms/op
o.a.g.perf.OperatorBench.unaryMinus
N/A avgt 10 3.427 ± 0.028 ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess
N/A avgt 10 17.721 ± 0.582 ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess
N/A avgt 10 121.229 ± 0.982 ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite
N/A avgt 10 0.264 ± 0.001 ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess
N/A avgt 10 120.994 ± 1.831 ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess
N/A avgt 10 26.169 ± 0.575 ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess
N/A avgt 10 37.516 ± 0.422 ms/op
o.a.g.perf.RunnerRegistryBench.listIterator
N/A avgt 10 ≈ 10⁻⁶ ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator
N/A avgt 10 ≈ 10⁻⁵ ms/op
{noformat}
was (Author: paulk):
Here are the benchmark results for indy without PR#2377:
{noformat}
> ./gradlew perf:jmh
Benchmark (indy=true default, PR#2377=false master)
(n) Mode Cnt Score Error Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
N/A thrpt 10 83713.724 ± 16645.285 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy
N/A thrpt 10 6448.663 ± 653.314 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS
N/A thrpt 10 29593.263 ± 1570.029 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java
N/A thrpt 10 7745.707 ± 134.878 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy
N/A thrpt 10 927.648 ± 14.078 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS
N/A thrpt 10 26473.389 ± 1085.085 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java
N/A thrpt 10 8200.186 ± 525.788 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy
N/A thrpt 10 830.010 ± 19.868 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS
N/A thrpt 10 25847.961 ± 1113.829 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java
N/A thrpt 10 7575.447 ± 248.499 ops/ms
o.a.g.bench.AckermannBench.groovy
5 avgt 10 0.211 ± 0.010 ms/op
o.a.g.bench.AckermannBench.groovy
6 avgt 10 0.921 ± 0.005 ms/op
o.a.g.bench.AckermannBench.groovy
7 avgt 10 3.967 ± 0.054 ms/op
o.a.g.bench.AckermannBench.groovy
8 avgt 10 16.821 ± 0.613 ms/op
o.a.g.bench.AckermannBench.java
5 avgt 10 0.047 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
6 avgt 10 0.237 ± 0.009 ms/op
o.a.g.bench.AckermannBench.java
7 avgt 10 1.023 ± 0.006 ms/op
o.a.g.bench.AckermannBench.java
8 avgt 10 4.247 ± 0.026 ms/op
o.a.g.bench.AryBench.groovy
10 avgt 10 0.196 ± 0.012 ms/op
o.a.g.bench.AryBench.groovy
100 avgt 10 1.913 ± 0.014 ms/op
o.a.g.bench.AryBench.groovy
1000 avgt 10 20.965 ± 0.074 ms/op
o.a.g.bench.AryBench.groovy
1000000 avgt 10 19199.337 ± 2839.641 ms/op
o.a.g.bench.AryBench.groovyCS
10 avgt 10 0.004 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000000 avgt 10 83.958 ± 0.399 ms/op
o.a.g.bench.AryBench.java
10 avgt 10 0.003 ± 0.001 ms/op
o.a.g.bench.AryBench.java
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000000 avgt 10 84.878 ± 2.942 ms/op
o.a.g.bench.FiboBench.groovy
30 avgt 10 6.833 ± 0.015 ms/op
o.a.g.bench.FiboBench.groovy
31 avgt 10 10.830 ± 1.402 ms/op
o.a.g.bench.FiboBench.groovy
32 avgt 10 17.196 ± 1.128 ms/op
o.a.g.bench.FiboBench.groovy
33 avgt 10 27.975 ± 1.620 ms/op
o.a.g.bench.FiboBench.groovy
34 avgt 10 44.517 ± 3.185 ms/op
o.a.g.bench.FiboBench.java
30 avgt 10 1.280 ± 0.018 ms/op
o.a.g.bench.FiboBench.java
31 avgt 10 2.126 ± 0.080 ms/op
o.a.g.bench.FiboBench.java
32 avgt 10 3.330 ± 0.051 ms/op
o.a.g.bench.FiboBench.java
33 avgt 10 5.461 ± 0.116 ms/op
o.a.g.bench.FiboBench.java
34 avgt 10 9.682 ± 1.522 ms/op
o.a.g.perf.ClosureBench.closureAsParameter
N/A avgt 10 15.210 ± 0.314 ms/op
o.a.g.perf.ClosureBench.closureCallMethod
N/A avgt 10 6.708 ± 0.564 ms/op
o.a.g.perf.ClosureBench.closureComposition
N/A avgt 10 31.812 ± 2.251 ms/op
o.a.g.perf.ClosureBench.closureDelegation
N/A avgt 10 16.668 ± 0.254 ms/op
o.a.g.perf.ClosureBench.closureModifyCapture
N/A avgt 10 3.141 ± 0.052 ms/op
o.a.g.perf.ClosureBench.closureMultiParams
N/A avgt 10 12.939 ± 1.524 ms/op
o.a.g.perf.ClosureBench.closureReuse
N/A avgt 10 7.031 ± 0.186 ms/op
o.a.g.perf.ClosureBench.closureSpread
N/A avgt 10 735.728 ± 26.065 ms/op
o.a.g.perf.ClosureBench.closureTrampoline
N/A avgt 10 17.645 ± 1.526 ms/op
o.a.g.perf.ClosureBench.closureWithCapture
N/A avgt 10 7.243 ± 0.165 ms/op
o.a.g.perf.ClosureBench.collectWithClosure
N/A avgt 10 19.371 ± 0.690 ms/op
o.a.g.perf.ClosureBench.curriedClosure
N/A avgt 10 41.526 ± 3.119 ms/op
o.a.g.perf.ClosureBench.eachWithClosure
N/A avgt 10 19.257 ± 0.261 ms/op
o.a.g.perf.ClosureBench.findAllWithClosure
N/A avgt 10 27.427 ± 0.311 ms/op
o.a.g.perf.ClosureBench.injectWithClosure
N/A avgt 10 20.346 ± 0.379 ms/op
o.a.g.perf.ClosureBench.methodReference
N/A avgt 10 34.811 ± 5.018 ms/op
o.a.g.perf.ClosureBench.nestedClosures
N/A avgt 10 18.429 ± 0.848 ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure
N/A avgt 10 36.909 ± 0.178 ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation
N/A avgt 10 12.442 ± 0.093 ms/op
o.a.g.perf.GStringBench.gstringAsMapKey
N/A avgt 10 115.188 ± 57.294 ms/op
o.a.g.perf.GStringBench.multiValueInterpolation
N/A avgt 10 127.134 ± 6.101 ms/op
o.a.g.perf.GStringBench.repeatedToString
N/A avgt 10 3.295 ± 0.024 ms/op
o.a.g.perf.GStringBench.simpleInterpolation
N/A avgt 10 52.900 ± 3.176 ms/op
o.a.g.perf.GStringBench.stringConcatBaseline
N/A avgt 10 24.570 ± 1.716 ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet
N/A avgt 10 68.991 ± 0.945 ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger
N/A avgt 10 29.707 ± 1.005 ms/op
o.a.g.perf.GroovyIdiomBench.asToString
N/A avgt 10 21.095 ± 0.315 ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline
N/A avgt 10 17.321 ± 5.326 ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString
N/A avgt 10 5.071 ± 0.590 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull
N/A avgt 10 5.122 ± 1.010 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull
N/A avgt 10 2.485 ± 0.040 ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline
N/A avgt 10 4.025 ± 0.168 ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains
N/A avgt 10 25.349 ± 0.898 ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation
N/A avgt 10 4.495 ± 0.357 ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration
N/A avgt 10 15.627 ± 0.361 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull
N/A avgt 10 7.102 ± 1.686 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull
N/A avgt 10 2.426 ± 0.119 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod
N/A avgt 10 22.024 ± 2.185 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty
N/A avgt 10 89.519 ± 7.312 ms/op
o.a.g.perf.GroovyIdiomBench.tapScope
N/A avgt 10 341.084 ± 75.867 ms/op
o.a.g.perf.GroovyIdiomBench.withScope
N/A avgt 10 71.554 ± 9.999 ms/op
o.a.g.perf.LoopsBench.eachIdentity
N/A avgt 10 30.147 ± 0.111 ms/op
o.a.g.perf.LoopsBench.methodCallInLoop
N/A avgt 10 3.896 ± 0.285 ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure
N/A avgt 10 52.584 ± 2.538 ms/op
o.a.g.perf.LoopsBench.originalEachToString
N/A avgt 10 32.164 ± 0.277 ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop
N/A avgt 10 3.952 ± 0.130 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls
N/A avgt 10 2.780 ± 0.020 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls
N/A avgt 10 2.734 ± 0.318 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject
N/A avgt 10 9.301 ± 0.160 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams
N/A avgt 10 7.418 ± 0.205 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite
N/A avgt 10 32.682 ± 0.502 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite
N/A avgt 10 1488.182 ± 52.175 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls
N/A avgt 10 2.721 ± 0.102 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls
N/A avgt 10 2.415 ± 0.022 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams
N/A avgt 10 7.222 ± 0.065 ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic
N/A avgt 10 7.514 ± 0.067 ms/op
o.a.g.perf.OperatorBench.comparisonOperators
N/A avgt 10 1.764 ± 0.021 ms/op
o.a.g.perf.OperatorBench.equalsOperator
N/A avgt 10 1.679 ± 0.017 ms/op
o.a.g.perf.OperatorBench.inOperator
N/A avgt 10 42.621 ± 1.072 ms/op
o.a.g.perf.OperatorBench.integerMultiply
N/A avgt 10 12.460 ± 0.927 ms/op
o.a.g.perf.OperatorBench.integerPlus
N/A avgt 10 2.470 ± 0.063 ms/op
o.a.g.perf.OperatorBench.listGetAt
N/A avgt 10 14.303 ± 2.946 ms/op
o.a.g.perf.OperatorBench.listLeftShift
N/A avgt 10 15.861 ± 0.579 ms/op
o.a.g.perf.OperatorBench.listPutAt
N/A avgt 10 15.045 ± 1.637 ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt
N/A avgt 10 60.843 ± 1.579 ms/op
o.a.g.perf.OperatorBench.spaceshipOperator
N/A avgt 10 6.202 ± 0.383 ms/op
o.a.g.perf.OperatorBench.stringMultiply
N/A avgt 10 10.523 ± 0.243 ms/op
o.a.g.perf.OperatorBench.unaryMinus
N/A avgt 10 2.650 ± 0.032 ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess
N/A avgt 10 8.314 ± 0.210 ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess
N/A avgt 10 114.626 ± 10.340 ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite
N/A avgt 10 2.632 ± 0.034 ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess
N/A avgt 10 117.448 ± 2.834 ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess
N/A avgt 10 18.670 ± 0.490 ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess
N/A avgt 10 31.791 ± 0.391 ms/op
o.a.g.perf.RunnerRegistryBench.listIterator
N/A avgt 10 ≈ 10⁻⁶ ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator
N/A avgt 10 ≈ 10⁻⁵ ms/op
{noformat}
And with PR#2377:
{noformat}
> ./gradlew perf:jmh
Benchmark (indy=true default, PR#2377=true)
(n) Mode Cnt Score Error Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
N/A thrpt 10 122171.641 ± 3979.231 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy
N/A thrpt 10 7145.357 ± 668.206 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS
N/A thrpt 10 29954.035 ± 244.620 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java
N/A thrpt 10 7893.945 ± 33.813 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy
N/A thrpt 10 950.384 ± 23.008 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS
N/A thrpt 10 26740.985 ± 1153.327 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java
N/A thrpt 10 8479.405 ± 464.010 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy
N/A thrpt 10 879.765 ± 70.448 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS
N/A thrpt 10 26146.570 ± 175.448 ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java
N/A thrpt 10 7532.053 ± 414.039 ops/ms
o.a.g.bench.AckermannBench.groovy
5 avgt 10 0.203 ± 0.002 ms/op
o.a.g.bench.AckermannBench.groovy
6 avgt 10 0.895 ± 0.062 ms/op
o.a.g.bench.AckermannBench.groovy
7 avgt 10 3.855 ± 0.050 ms/op
o.a.g.bench.AckermannBench.groovy
8 avgt 10 16.842 ± 0.982 ms/op
o.a.g.bench.AckermannBench.java
5 avgt 10 0.047 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
6 avgt 10 0.231 ± 0.001 ms/op
o.a.g.bench.AckermannBench.java
7 avgt 10 1.015 ± 0.006 ms/op
o.a.g.bench.AckermannBench.java
8 avgt 10 4.283 ± 0.186 ms/op
o.a.g.bench.AryBench.groovy
10 avgt 10 0.194 ± 0.008 ms/op
o.a.g.bench.AryBench.groovy
100 avgt 10 1.956 ± 0.065 ms/op
o.a.g.bench.AryBench.groovy
1000 avgt 10 21.641 ± 0.356 ms/op
o.a.g.bench.AryBench.groovy
1000000 avgt 10 21009.247 ± 235.910 ms/op
o.a.g.bench.AryBench.groovyCS
10 avgt 10 0.004 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000 avgt 10 0.049 ± 0.001 ms/op
o.a.g.bench.AryBench.groovyCS
1000000 avgt 10 83.757 ± 0.312 ms/op
o.a.g.bench.AryBench.java
10 avgt 10 0.003 ± 0.001 ms/op
o.a.g.bench.AryBench.java
100 avgt 10 0.007 ± 0.001 ms/op
o.a.g.bench.AryBench.java
1000 avgt 10 0.049 ± 0.002 ms/op
o.a.g.bench.AryBench.java
1000000 avgt 10 84.395 ± 0.568 ms/op
o.a.g.bench.FiboBench.groovy
30 avgt 10 6.297 ± 0.029 ms/op
o.a.g.bench.FiboBench.groovy
31 avgt 10 10.252 ± 0.360 ms/op
o.a.g.bench.FiboBench.groovy
32 avgt 10 16.583 ± 0.136 ms/op
o.a.g.bench.FiboBench.groovy
33 avgt 10 28.193 ± 2.670 ms/op
o.a.g.bench.FiboBench.groovy
34 avgt 10 43.331 ± 0.300 ms/op
o.a.g.bench.FiboBench.java
30 avgt 10 1.286 ± 0.022 ms/op
o.a.g.bench.FiboBench.java
31 avgt 10 2.082 ± 0.036 ms/op
o.a.g.bench.FiboBench.java
32 avgt 10 3.393 ± 0.082 ms/op
o.a.g.bench.FiboBench.java
33 avgt 10 5.431 ± 0.226 ms/op
o.a.g.bench.FiboBench.java
34 avgt 10 8.908 ± 0.371 ms/op
o.a.g.perf.ClosureBench.closureAsParameter
N/A avgt 10 15.193 ± 0.091 ms/op
o.a.g.perf.ClosureBench.closureCallMethod
N/A avgt 10 6.644 ± 0.213 ms/op
o.a.g.perf.ClosureBench.closureComposition
N/A avgt 10 30.210 ± 0.473 ms/op
o.a.g.perf.ClosureBench.closureDelegation
N/A avgt 10 16.989 ± 0.373 ms/op
o.a.g.perf.ClosureBench.closureModifyCapture
N/A avgt 10 3.162 ± 0.102 ms/op
o.a.g.perf.ClosureBench.closureMultiParams
N/A avgt 10 14.018 ± 3.548 ms/op
o.a.g.perf.ClosureBench.closureReuse
N/A avgt 10 6.534 ± 0.148 ms/op
o.a.g.perf.ClosureBench.closureSpread
N/A avgt 10 693.288 ± 28.089 ms/op
o.a.g.perf.ClosureBench.closureTrampoline
N/A avgt 10 17.451 ± 1.163 ms/op
o.a.g.perf.ClosureBench.closureWithCapture
N/A avgt 10 6.969 ± 0.097 ms/op
o.a.g.perf.ClosureBench.collectWithClosure
N/A avgt 10 19.918 ± 0.500 ms/op
o.a.g.perf.ClosureBench.curriedClosure
N/A avgt 10 40.093 ± 1.223 ms/op
o.a.g.perf.ClosureBench.eachWithClosure
N/A avgt 10 18.670 ± 0.472 ms/op
o.a.g.perf.ClosureBench.findAllWithClosure
N/A avgt 10 25.293 ± 0.492 ms/op
o.a.g.perf.ClosureBench.injectWithClosure
N/A avgt 10 20.073 ± 0.210 ms/op
o.a.g.perf.ClosureBench.methodReference
N/A avgt 10 32.020 ± 1.281 ms/op
o.a.g.perf.ClosureBench.nestedClosures
N/A avgt 10 18.464 ± 0.221 ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure
N/A avgt 10 37.526 ± 2.393 ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation
N/A avgt 10 12.414 ± 0.057 ms/op
o.a.g.perf.GStringBench.gstringAsMapKey
N/A avgt 10 159.225 ± 7.330 ms/op
o.a.g.perf.GStringBench.multiValueInterpolation
N/A avgt 10 125.096 ± 3.673 ms/op
o.a.g.perf.GStringBench.repeatedToString
N/A avgt 10 3.181 ± 0.079 ms/op
o.a.g.perf.GStringBench.simpleInterpolation
N/A avgt 10 51.113 ± 0.639 ms/op
o.a.g.perf.GStringBench.stringConcatBaseline
N/A avgt 10 26.699 ± 1.198 ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet
N/A avgt 10 66.883 ± 3.344 ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger
N/A avgt 10 28.867 ± 0.695 ms/op
o.a.g.perf.GroovyIdiomBench.asToString
N/A avgt 10 20.283 ± 2.968 ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline
N/A avgt 10 15.603 ± 0.517 ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString
N/A avgt 10 4.822 ± 0.749 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull
N/A avgt 10 4.976 ± 0.191 ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull
N/A avgt 10 2.405 ± 0.044 ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline
N/A avgt 10 3.952 ± 0.069 ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains
N/A avgt 10 26.349 ± 0.312 ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation
N/A avgt 10 4.255 ± 0.033 ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration
N/A avgt 10 14.152 ± 0.068 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull
N/A avgt 10 6.890 ± 1.664 ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull
N/A avgt 10 2.422 ± 0.022 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod
N/A avgt 10 19.375 ± 1.788 ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty
N/A avgt 10 89.095 ± 3.134 ms/op
o.a.g.perf.GroovyIdiomBench.tapScope
N/A avgt 10 337.178 ± 70.824 ms/op
o.a.g.perf.GroovyIdiomBench.withScope
N/A avgt 10 68.158 ± 1.211 ms/op
o.a.g.perf.LoopsBench.eachIdentity
N/A avgt 10 28.237 ± 3.410 ms/op
o.a.g.perf.LoopsBench.methodCallInLoop
N/A avgt 10 3.763 ± 0.040 ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure
N/A avgt 10 50.478 ± 0.466 ms/op
o.a.g.perf.LoopsBench.originalEachToString
N/A avgt 10 31.653 ± 1.517 ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop
N/A avgt 10 3.685 ± 0.058 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls
N/A avgt 10 2.793 ± 0.119 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls
N/A avgt 10 2.579 ± 0.138 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject
N/A avgt 10 9.258 ± 0.148 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams
N/A avgt 10 7.243 ± 0.149 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite
N/A avgt 10 32.724 ± 0.903 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite
N/A avgt 10 1289.290 ± 52.782 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls
N/A avgt 10 2.638 ± 0.010 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls
N/A avgt 10 2.357 ± 0.088 ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams
N/A avgt 10 7.032 ± 0.108 ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic
N/A avgt 10 7.251 ± 0.115 ms/op
o.a.g.perf.OperatorBench.comparisonOperators
N/A avgt 10 1.711 ± 0.009 ms/op
o.a.g.perf.OperatorBench.equalsOperator
N/A avgt 10 1.679 ± 0.112 ms/op
o.a.g.perf.OperatorBench.inOperator
N/A avgt 10 41.531 ± 1.989 ms/op
o.a.g.perf.OperatorBench.integerMultiply
N/A avgt 10 12.005 ± 0.726 ms/op
o.a.g.perf.OperatorBench.integerPlus
N/A avgt 10 2.356 ± 0.035 ms/op
o.a.g.perf.OperatorBench.listGetAt
N/A avgt 10 9.720 ± 0.148 ms/op
o.a.g.perf.OperatorBench.listLeftShift
N/A avgt 10 15.705 ± 1.057 ms/op
o.a.g.perf.OperatorBench.listPutAt
N/A avgt 10 13.627 ± 0.639 ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt
N/A avgt 10 59.702 ± 1.360 ms/op
o.a.g.perf.OperatorBench.spaceshipOperator
N/A avgt 10 6.143 ± 0.157 ms/op
o.a.g.perf.OperatorBench.stringMultiply
N/A avgt 10 10.430 ± 0.111 ms/op
o.a.g.perf.OperatorBench.unaryMinus
N/A avgt 10 2.584 ± 0.045 ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess
N/A avgt 10 7.937 ± 0.165 ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess
N/A avgt 10 103.978 ± 0.507 ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite
N/A avgt 10 2.601 ± 0.093 ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess
N/A avgt 10 114.794 ± 1.944 ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess
N/A avgt 10 18.558 ± 0.564 ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess
N/A avgt 10 31.028 ± 1.454 ms/op
o.a.g.perf.RunnerRegistryBench.listIterator
N/A avgt 10 ≈ 10⁻⁶ ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator
N/A avgt 10 ≈ 10⁻⁵ ms/op
{noformat}
> Groovy 4 runtime performance on average 2.4x slower than Groovy 3
> -----------------------------------------------------------------
>
> Key: GROOVY-10307
> URL: https://issues.apache.org/jira/browse/GROOVY-10307
> Project: Groovy
> Issue Type: Bug
> Components: bytecode, performance
> Affects Versions: 4.0.0-beta-1, 3.0.9
> Environment: OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9
> (build 11.0.11+9)
> OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
> WIN10 (tests) / REL 8 (web application)
> IntelliJ 2021.2
> Reporter: mgroovy
> Priority: Major
> Attachments: groovy_3_0_9_gc.png, groovy_3_0_9_loop2.png,
> groovy_3_0_9_loop4.png, groovy_3_0_9_mem.png, groovy_4_0_0_b1_loop2.png,
> groovy_4_0_0_b1_loop4.png, groovy_4_0_0_b1_loop4_gc.png,
> groovy_4_0_0_b1_loop4_mem.png,
> groovysql_performance_groovy4_2_xx_yy_zzzz.groovy, loops.groovy,
> profile3.txt, profile4-loops.txt, profile4.txt, profile4d.txt
>
>
> Groovy 4.0.0-beta-1 runtime performance in our framework is on average 2 to 3
> times slower compared to using Groovy 3.0.9 (regular i.e. non-INDY)
> * Our complete framework and application code is completely written in
> Groovy, spread over multiple IntelliJ modules
> ** mixed @CompileDynamic/@TypeChecked and @CompileStatic
> ** No Java classes left in project, i.e. no cross compilation occurs
> * We build using IntelliJ 2021.2 Groovy build process, then run / deploy the
> compiled class files
> ** We do _not_ use a Groovy based DSL, nor do we execute Groovy scripts
> during execution
> * Performance degradation when using Groovy 4.0.0-beta-1 instead of Groovy
> 3.0.9 (non-INDY):
> ** The performance of the largest of our web applications has dropped 3x
> (startup) / 2x (table refresh) respectively
> *** Stack: Tomcat/Vaadin/Ebean plus framework generated SQL
> ** Our test suite runs about 2.4 times as long as before (120 min when using
> G4, compared to about 50 min with G3)
> *** JUnit 5
> *** test suite also contains no scripts / dynamic code execution
> *** Individual test performance varies: A small number of tests runs faster,
> but the majority is slower, with some extreme cases taking nearly 10x as long
> to finish
> * Using Groovy 3.0.9 INDY displays nearly identical performance degradation,
> so it seems that the use of invoke dynamic is somehow at fault
--
This message was sent by Atlassian Jira
(v8.20.10#820010)