[ 
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:09 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 with PR#2377:
{noformat}
> ./gradlew perf:jmh -Pindy=false
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  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 with 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}


> 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)

Reply via email to