[
https://issues.apache.org/jira/browse/GROOVY-10307?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18061010#comment-18061010
]
Paul King commented on GROOVY-10307:
------------------------------------
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)