[ 
https://issues.apache.org/jira/browse/GROOVY-10307?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18061010#comment-18061010
 ] 

Paul King commented on GROOVY-10307:
------------------------------------

Here are the benchmark results for indy without PR#2377:
{noformat}
> ./gradlew perf:jmh
Benchmark (indy=true default, PR#2377=false master)                             
            (n)   Mode  Cnt      Score       Error   Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
      N/A  thrpt   10  83713.724 ± 16645.285  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy                
            N/A  thrpt   10   6448.663 ±   653.314  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS              
            N/A  thrpt   10  29593.263 ±  1570.029  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java                  
            N/A  thrpt   10   7745.707 ±   134.878  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy                
            N/A  thrpt   10    927.648 ±    14.078  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS              
            N/A  thrpt   10  26473.389 ±  1085.085  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java                  
            N/A  thrpt   10   8200.186 ±   525.788  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy                
            N/A  thrpt   10    830.010 ±    19.868  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS              
            N/A  thrpt   10  25847.961 ±  1113.829  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java                  
            N/A  thrpt   10   7575.447 ±   248.499  ops/ms
o.a.g.bench.AckermannBench.groovy                                               
              5   avgt   10      0.211 ±     0.010   ms/op
o.a.g.bench.AckermannBench.groovy                                               
              6   avgt   10      0.921 ±     0.005   ms/op
o.a.g.bench.AckermannBench.groovy                                               
              7   avgt   10      3.967 ±     0.054   ms/op
o.a.g.bench.AckermannBench.groovy                                               
              8   avgt   10     16.821 ±     0.613   ms/op
o.a.g.bench.AckermannBench.java                                                 
              5   avgt   10      0.047 ±     0.001   ms/op
o.a.g.bench.AckermannBench.java                                                 
              6   avgt   10      0.237 ±     0.009   ms/op
o.a.g.bench.AckermannBench.java                                                 
              7   avgt   10      1.023 ±     0.006   ms/op
o.a.g.bench.AckermannBench.java                                                 
              8   avgt   10      4.247 ±     0.026   ms/op
o.a.g.bench.AryBench.groovy                                                     
             10   avgt   10      0.196 ±     0.012   ms/op
o.a.g.bench.AryBench.groovy                                                     
            100   avgt   10      1.913 ±     0.014   ms/op
o.a.g.bench.AryBench.groovy                                                     
           1000   avgt   10     20.965 ±     0.074   ms/op
o.a.g.bench.AryBench.groovy                                                     
        1000000   avgt   10  19199.337 ±  2839.641   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
             10   avgt   10      0.004 ±     0.001   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
            100   avgt   10      0.007 ±     0.001   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
           1000   avgt   10      0.049 ±     0.001   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
        1000000   avgt   10     83.958 ±     0.399   ms/op
o.a.g.bench.AryBench.java                                                       
             10   avgt   10      0.003 ±     0.001   ms/op
o.a.g.bench.AryBench.java                                                       
            100   avgt   10      0.007 ±     0.001   ms/op
o.a.g.bench.AryBench.java                                                       
           1000   avgt   10      0.049 ±     0.001   ms/op
o.a.g.bench.AryBench.java                                                       
        1000000   avgt   10     84.878 ±     2.942   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             30   avgt   10      6.833 ±     0.015   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             31   avgt   10     10.830 ±     1.402   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             32   avgt   10     17.196 ±     1.128   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             33   avgt   10     27.975 ±     1.620   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             34   avgt   10     44.517 ±     3.185   ms/op
o.a.g.bench.FiboBench.java                                                      
             30   avgt   10      1.280 ±     0.018   ms/op
o.a.g.bench.FiboBench.java                                                      
             31   avgt   10      2.126 ±     0.080   ms/op
o.a.g.bench.FiboBench.java                                                      
             32   avgt   10      3.330 ±     0.051   ms/op
o.a.g.bench.FiboBench.java                                                      
             33   avgt   10      5.461 ±     0.116   ms/op
o.a.g.bench.FiboBench.java                                                      
             34   avgt   10      9.682 ±     1.522   ms/op
o.a.g.perf.ClosureBench.closureAsParameter                                      
            N/A   avgt   10     15.210 ±     0.314   ms/op
o.a.g.perf.ClosureBench.closureCallMethod                                       
            N/A   avgt   10      6.708 ±     0.564   ms/op
o.a.g.perf.ClosureBench.closureComposition                                      
            N/A   avgt   10     31.812 ±     2.251   ms/op
o.a.g.perf.ClosureBench.closureDelegation                                       
            N/A   avgt   10     16.668 ±     0.254   ms/op
o.a.g.perf.ClosureBench.closureModifyCapture                                    
            N/A   avgt   10      3.141 ±     0.052   ms/op
o.a.g.perf.ClosureBench.closureMultiParams                                      
            N/A   avgt   10     12.939 ±     1.524   ms/op
o.a.g.perf.ClosureBench.closureReuse                                            
            N/A   avgt   10      7.031 ±     0.186   ms/op
o.a.g.perf.ClosureBench.closureSpread                                           
            N/A   avgt   10    735.728 ±    26.065   ms/op
o.a.g.perf.ClosureBench.closureTrampoline                                       
            N/A   avgt   10     17.645 ±     1.526   ms/op
o.a.g.perf.ClosureBench.closureWithCapture                                      
            N/A   avgt   10      7.243 ±     0.165   ms/op
o.a.g.perf.ClosureBench.collectWithClosure                                      
            N/A   avgt   10     19.371 ±     0.690   ms/op
o.a.g.perf.ClosureBench.curriedClosure                                          
            N/A   avgt   10     41.526 ±     3.119   ms/op
o.a.g.perf.ClosureBench.eachWithClosure                                         
            N/A   avgt   10     19.257 ±     0.261   ms/op
o.a.g.perf.ClosureBench.findAllWithClosure                                      
            N/A   avgt   10     27.427 ±     0.311   ms/op
o.a.g.perf.ClosureBench.injectWithClosure                                       
            N/A   avgt   10     20.346 ±     0.379   ms/op
o.a.g.perf.ClosureBench.methodReference                                         
            N/A   avgt   10     34.811 ±     5.018   ms/op
o.a.g.perf.ClosureBench.nestedClosures                                          
            N/A   avgt   10     18.429 ±     0.848   ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure                                     
            N/A   avgt   10     36.909 ±     0.178   ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation                                   
            N/A   avgt   10     12.442 ±     0.093   ms/op
o.a.g.perf.GStringBench.gstringAsMapKey                                         
            N/A   avgt   10    115.188 ±    57.294   ms/op
o.a.g.perf.GStringBench.multiValueInterpolation                                 
            N/A   avgt   10    127.134 ±     6.101   ms/op
o.a.g.perf.GStringBench.repeatedToString                                        
            N/A   avgt   10      3.295 ±     0.024   ms/op
o.a.g.perf.GStringBench.simpleInterpolation                                     
            N/A   avgt   10     52.900 ±     3.176   ms/op
o.a.g.perf.GStringBench.stringConcatBaseline                                    
            N/A   avgt   10     24.570 ±     1.716   ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet                                         
            N/A   avgt   10     68.991 ±     0.945   ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger                                   
            N/A   avgt   10     29.707 ±     1.005   ms/op
o.a.g.perf.GroovyIdiomBench.asToString                                          
            N/A   avgt   10     21.095 ±     0.315   ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline                                     
            N/A   avgt   10     17.321 ±     5.326   ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString                                    
            N/A   avgt   10      5.071 ±     0.590   ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull                                        
            N/A   avgt   10      5.122 ±     1.010   ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull                                           
            N/A   avgt   10      2.485 ±     0.040   ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline                                   
            N/A   avgt   10      4.025 ±     0.168   ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains                                       
            N/A   avgt   10     25.349 ±     0.898   ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation                                       
            N/A   avgt   10      4.495 ±     0.357   ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration                                      
            N/A   avgt   10     15.627 ±     0.361   ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull                                      
            N/A   avgt   10      7.102 ±     1.686   ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull                                         
            N/A   avgt   10      2.426 ±     0.119   ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod                                     
            N/A   avgt   10     22.024 ±     2.185   ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty                                   
            N/A   avgt   10     89.519 ±     7.312   ms/op
o.a.g.perf.GroovyIdiomBench.tapScope                                            
            N/A   avgt   10    341.084 ±    75.867   ms/op
o.a.g.perf.GroovyIdiomBench.withScope                                           
            N/A   avgt   10     71.554 ±     9.999   ms/op
o.a.g.perf.LoopsBench.eachIdentity                                              
            N/A   avgt   10     30.147 ±     0.111   ms/op
o.a.g.perf.LoopsBench.methodCallInLoop                                          
            N/A   avgt   10      3.896 ±     0.285   ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure                                    
            N/A   avgt   10     52.584 ±     2.538   ms/op
o.a.g.perf.LoopsBench.originalEachToString                                      
            N/A   avgt   10     32.164 ±     0.277   ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop                                       
            N/A   avgt   10      3.952 ±     0.130   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls                     
            N/A   avgt   10      2.780 ±     0.020   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls                  
            N/A   avgt   10      2.734 ±     0.318   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject                      
            N/A   avgt   10      9.301 ±     0.160   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams                      
            N/A   avgt   10      7.418 ±     0.205   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite                   
            N/A   avgt   10     32.682 ±     0.502   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite                   
            N/A   avgt   10   1488.182 ±    52.175   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls                     
            N/A   avgt   10      2.721 ±     0.102   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls                     
            N/A   avgt   10      2.415 ±     0.022   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams                
            N/A   avgt   10      7.222 ±     0.065   ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic                                   
            N/A   avgt   10      7.514 ±     0.067   ms/op
o.a.g.perf.OperatorBench.comparisonOperators                                    
            N/A   avgt   10      1.764 ±     0.021   ms/op
o.a.g.perf.OperatorBench.equalsOperator                                         
            N/A   avgt   10      1.679 ±     0.017   ms/op
o.a.g.perf.OperatorBench.inOperator                                             
            N/A   avgt   10     42.621 ±     1.072   ms/op
o.a.g.perf.OperatorBench.integerMultiply                                        
            N/A   avgt   10     12.460 ±     0.927   ms/op
o.a.g.perf.OperatorBench.integerPlus                                            
            N/A   avgt   10      2.470 ±     0.063   ms/op
o.a.g.perf.OperatorBench.listGetAt                                              
            N/A   avgt   10     14.303 ±     2.946   ms/op
o.a.g.perf.OperatorBench.listLeftShift                                          
            N/A   avgt   10     15.861 ±     0.579   ms/op
o.a.g.perf.OperatorBench.listPutAt                                              
            N/A   avgt   10     15.045 ±     1.637   ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt                                          
            N/A   avgt   10     60.843 ±     1.579   ms/op
o.a.g.perf.OperatorBench.spaceshipOperator                                      
            N/A   avgt   10      6.202 ±     0.383   ms/op
o.a.g.perf.OperatorBench.stringMultiply                                         
            N/A   avgt   10     10.523 ±     0.243   ms/op
o.a.g.perf.OperatorBench.unaryMinus                                             
            N/A   avgt   10      2.650 ±     0.032   ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess                            
            N/A   avgt   10      8.314 ±     0.210   ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess                       
            N/A   avgt   10    114.626 ±    10.340   ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite                                   
            N/A   avgt   10      2.632 ±     0.034   ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess                               
            N/A   avgt   10    117.448 ±     2.834   ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess                             
            N/A   avgt   10     18.670 ±     0.490   ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess                                   
            N/A   avgt   10     31.791 ±     0.391   ms/op
o.a.g.perf.RunnerRegistryBench.listIterator                                     
            N/A   avgt   10     ≈ 10⁻⁶               ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator                                 
            N/A   avgt   10     ≈ 10⁻⁵               ms/op
{noformat}
And with PR#2377:
{noformat}
> ./gradlew perf:jmh
Benchmark (indy=true default, PR#2377=true)                                     
            (n)   Mode  Cnt      Score       Error   Units
o.a.g.bench.GeneratedHashCodeBench.generated_hashcode_on_instance_with_null_properties
      N/A  thrpt   10  122171.641 ± 3979.231  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovy                
            N/A  thrpt   10    7145.357 ±  668.206  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_groovyCS              
            N/A  thrpt   10   29954.035 ±  244.620  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_1_monomorphic_java                  
            N/A  thrpt   10    7893.945 ±   33.813  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovy                
            N/A  thrpt   10     950.384 ±   23.008  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_groovyCS              
            N/A  thrpt   10   26740.985 ± 1153.327  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_3_polymorphic_java                  
            N/A  thrpt   10    8479.405 ±  464.010  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovy                
            N/A  thrpt   10     879.765 ±   70.448  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_groovyCS              
            N/A  thrpt   10   26146.570 ±  175.448  ops/ms
o.a.g.bench.dispatch.CallsiteBench.dispatch_8_megamorphic_java                  
            N/A  thrpt   10    7532.053 ±  414.039  ops/ms
o.a.g.bench.AckermannBench.groovy                                               
              5   avgt   10       0.203 ±    0.002   ms/op
o.a.g.bench.AckermannBench.groovy                                               
              6   avgt   10       0.895 ±    0.062   ms/op
o.a.g.bench.AckermannBench.groovy                                               
              7   avgt   10       3.855 ±    0.050   ms/op
o.a.g.bench.AckermannBench.groovy                                               
              8   avgt   10      16.842 ±    0.982   ms/op
o.a.g.bench.AckermannBench.java                                                 
              5   avgt   10       0.047 ±    0.001   ms/op
o.a.g.bench.AckermannBench.java                                                 
              6   avgt   10       0.231 ±    0.001   ms/op
o.a.g.bench.AckermannBench.java                                                 
              7   avgt   10       1.015 ±    0.006   ms/op
o.a.g.bench.AckermannBench.java                                                 
              8   avgt   10       4.283 ±    0.186   ms/op
o.a.g.bench.AryBench.groovy                                                     
             10   avgt   10       0.194 ±    0.008   ms/op
o.a.g.bench.AryBench.groovy                                                     
            100   avgt   10       1.956 ±    0.065   ms/op
o.a.g.bench.AryBench.groovy                                                     
           1000   avgt   10      21.641 ±    0.356   ms/op
o.a.g.bench.AryBench.groovy                                                     
        1000000   avgt   10   21009.247 ±  235.910   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
             10   avgt   10       0.004 ±    0.001   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
            100   avgt   10       0.007 ±    0.001   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
           1000   avgt   10       0.049 ±    0.001   ms/op
o.a.g.bench.AryBench.groovyCS                                                   
        1000000   avgt   10      83.757 ±    0.312   ms/op
o.a.g.bench.AryBench.java                                                       
             10   avgt   10       0.003 ±    0.001   ms/op
o.a.g.bench.AryBench.java                                                       
            100   avgt   10       0.007 ±    0.001   ms/op
o.a.g.bench.AryBench.java                                                       
           1000   avgt   10       0.049 ±    0.002   ms/op
o.a.g.bench.AryBench.java                                                       
        1000000   avgt   10      84.395 ±    0.568   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             30   avgt   10       6.297 ±    0.029   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             31   avgt   10      10.252 ±    0.360   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             32   avgt   10      16.583 ±    0.136   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             33   avgt   10      28.193 ±    2.670   ms/op
o.a.g.bench.FiboBench.groovy                                                    
             34   avgt   10      43.331 ±    0.300   ms/op
o.a.g.bench.FiboBench.java                                                      
             30   avgt   10       1.286 ±    0.022   ms/op
o.a.g.bench.FiboBench.java                                                      
             31   avgt   10       2.082 ±    0.036   ms/op
o.a.g.bench.FiboBench.java                                                      
             32   avgt   10       3.393 ±    0.082   ms/op
o.a.g.bench.FiboBench.java                                                      
             33   avgt   10       5.431 ±    0.226   ms/op
o.a.g.bench.FiboBench.java                                                      
             34   avgt   10       8.908 ±    0.371   ms/op
o.a.g.perf.ClosureBench.closureAsParameter                                      
            N/A   avgt   10      15.193 ±    0.091   ms/op
o.a.g.perf.ClosureBench.closureCallMethod                                       
            N/A   avgt   10       6.644 ±    0.213   ms/op
o.a.g.perf.ClosureBench.closureComposition                                      
            N/A   avgt   10      30.210 ±    0.473   ms/op
o.a.g.perf.ClosureBench.closureDelegation                                       
            N/A   avgt   10      16.989 ±    0.373   ms/op
o.a.g.perf.ClosureBench.closureModifyCapture                                    
            N/A   avgt   10       3.162 ±    0.102   ms/op
o.a.g.perf.ClosureBench.closureMultiParams                                      
            N/A   avgt   10      14.018 ±    3.548   ms/op
o.a.g.perf.ClosureBench.closureReuse                                            
            N/A   avgt   10       6.534 ±    0.148   ms/op
o.a.g.perf.ClosureBench.closureSpread                                           
            N/A   avgt   10     693.288 ±   28.089   ms/op
o.a.g.perf.ClosureBench.closureTrampoline                                       
            N/A   avgt   10      17.451 ±    1.163   ms/op
o.a.g.perf.ClosureBench.closureWithCapture                                      
            N/A   avgt   10       6.969 ±    0.097   ms/op
o.a.g.perf.ClosureBench.collectWithClosure                                      
            N/A   avgt   10      19.918 ±    0.500   ms/op
o.a.g.perf.ClosureBench.curriedClosure                                          
            N/A   avgt   10      40.093 ±    1.223   ms/op
o.a.g.perf.ClosureBench.eachWithClosure                                         
            N/A   avgt   10      18.670 ±    0.472   ms/op
o.a.g.perf.ClosureBench.findAllWithClosure                                      
            N/A   avgt   10      25.293 ±    0.492   ms/op
o.a.g.perf.ClosureBench.injectWithClosure                                       
            N/A   avgt   10      20.073 ±    0.210   ms/op
o.a.g.perf.ClosureBench.methodReference                                         
            N/A   avgt   10      32.020 ±    1.281   ms/op
o.a.g.perf.ClosureBench.nestedClosures                                          
            N/A   avgt   10      18.464 ±    0.221   ms/op
o.a.g.perf.ClosureBench.rightCurriedClosure                                     
            N/A   avgt   10      37.526 ±    2.393   ms/op
o.a.g.perf.ClosureBench.simpleClosureCreation                                   
            N/A   avgt   10      12.414 ±    0.057   ms/op
o.a.g.perf.GStringBench.gstringAsMapKey                                         
            N/A   avgt   10     159.225 ±    7.330   ms/op
o.a.g.perf.GStringBench.multiValueInterpolation                                 
            N/A   avgt   10     125.096 ±    3.673   ms/op
o.a.g.perf.GStringBench.repeatedToString                                        
            N/A   avgt   10       3.181 ±    0.079   ms/op
o.a.g.perf.GStringBench.simpleInterpolation                                     
            N/A   avgt   10      51.113 ±    0.639   ms/op
o.a.g.perf.GStringBench.stringConcatBaseline                                    
            N/A   avgt   10      26.699 ±    1.198   ms/op
o.a.g.perf.GroovyIdiomBench.asListToSet                                         
            N/A   avgt   10      66.883 ±    3.344   ms/op
o.a.g.perf.GroovyIdiomBench.asStringToInteger                                   
            N/A   avgt   10      28.867 ±    0.695   ms/op
o.a.g.perf.GroovyIdiomBench.asToString                                          
            N/A   avgt   10      20.283 ±    2.968   ms/op
o.a.g.perf.GroovyIdiomBench.collectBaseline                                     
            N/A   avgt   10      15.603 ±    0.517   ms/op
o.a.g.perf.GroovyIdiomBench.elvisEmptyString                                    
            N/A   avgt   10       4.822 ±    0.749   ms/op
o.a.g.perf.GroovyIdiomBench.elvisNonNull                                        
            N/A   avgt   10       4.976 ±    0.191   ms/op
o.a.g.perf.GroovyIdiomBench.elvisNull                                           
            N/A   avgt   10       2.405 ±    0.044   ms/op
o.a.g.perf.GroovyIdiomBench.normalNavBaseline                                   
            N/A   avgt   10       3.952 ±    0.069   ms/op
o.a.g.perf.GroovyIdiomBench.rangeContains                                       
            N/A   avgt   10      26.349 ±    0.312   ms/op
o.a.g.perf.GroovyIdiomBench.rangeCreation                                       
            N/A   avgt   10       4.255 ±    0.033   ms/op
o.a.g.perf.GroovyIdiomBench.rangeIteration                                      
            N/A   avgt   10      14.152 ±    0.068   ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNonNull                                      
            N/A   avgt   10       6.890 ±    1.664   ms/op
o.a.g.perf.GroovyIdiomBench.safeNavNull                                         
            N/A   avgt   10       2.422 ±    0.022   ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotMethod                                     
            N/A   avgt   10      19.375 ±    1.788   ms/op
o.a.g.perf.GroovyIdiomBench.spreadDotProperty                                   
            N/A   avgt   10      89.095 ±    3.134   ms/op
o.a.g.perf.GroovyIdiomBench.tapScope                                            
            N/A   avgt   10     337.178 ±   70.824   ms/op
o.a.g.perf.GroovyIdiomBench.withScope                                           
            N/A   avgt   10      68.158 ±    1.211   ms/op
o.a.g.perf.LoopsBench.eachIdentity                                              
            N/A   avgt   10      28.237 ±    3.410   ms/op
o.a.g.perf.LoopsBench.methodCallInLoop                                          
            N/A   avgt   10       3.763 ±    0.040   ms/op
o.a.g.perf.LoopsBench.nestedLoopsWithClosure                                    
            N/A   avgt   10      50.478 ±    0.466   ms/op
o.a.g.perf.LoopsBench.originalEachToString                                      
            N/A   avgt   10      31.653 ±    1.517   ms/op
o.a.g.perf.LoopsBench.reusedClosureInLoop                                       
            N/A   avgt   10       3.685 ±    0.058   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkDynamicTypedCalls                     
            N/A   avgt   10       2.793 ±    0.119   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkInterfaceMethodCalls                  
            N/A   avgt   10       2.579 ±    0.138   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithObject                      
            N/A   avgt   10       9.258 ±    0.148   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMethodWithParams                      
            N/A   avgt   10       7.243 ±    0.149   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkMonomorphicCallSite                   
            N/A   avgt   10      32.724 ±    0.903   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkPolymorphicCallSite                   
            N/A   avgt   10    1289.290 ±   52.782   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkSimpleMethodCalls                     
            N/A   avgt   10       2.638 ±    0.010   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodCalls                     
            N/A   avgt   10       2.357 ±    0.088   ms/op
o.a.g.perf.MethodInvocationBench.benchmarkStaticMethodWithParams                
            N/A   avgt   10       7.032 ±    0.108   ms/op
o.a.g.perf.OperatorBench.bigDecimalArithmetic                                   
            N/A   avgt   10       7.251 ±    0.115   ms/op
o.a.g.perf.OperatorBench.comparisonOperators                                    
            N/A   avgt   10       1.711 ±    0.009   ms/op
o.a.g.perf.OperatorBench.equalsOperator                                         
            N/A   avgt   10       1.679 ±    0.112   ms/op
o.a.g.perf.OperatorBench.inOperator                                             
            N/A   avgt   10      41.531 ±    1.989   ms/op
o.a.g.perf.OperatorBench.integerMultiply                                        
            N/A   avgt   10      12.005 ±    0.726   ms/op
o.a.g.perf.OperatorBench.integerPlus                                            
            N/A   avgt   10       2.356 ±    0.035   ms/op
o.a.g.perf.OperatorBench.listGetAt                                              
            N/A   avgt   10       9.720 ±    0.148   ms/op
o.a.g.perf.OperatorBench.listLeftShift                                          
            N/A   avgt   10      15.705 ±    1.057   ms/op
o.a.g.perf.OperatorBench.listPutAt                                              
            N/A   avgt   10      13.627 ±    0.639   ms/op
o.a.g.perf.OperatorBench.mapGetAtPutAt                                          
            N/A   avgt   10      59.702 ±    1.360   ms/op
o.a.g.perf.OperatorBench.spaceshipOperator                                      
            N/A   avgt   10       6.143 ±    0.157   ms/op
o.a.g.perf.OperatorBench.stringMultiply                                         
            N/A   avgt   10      10.430 ±    0.111   ms/op
o.a.g.perf.OperatorBench.unaryMinus                                             
            N/A   avgt   10       2.584 ±    0.045   ms/op
o.a.g.perf.PropertyAccessBench.chainedPropertyAccess                            
            N/A   avgt   10       7.937 ±    0.165   ms/op
o.a.g.perf.PropertyAccessBench.dynamicTypedPropertyAccess                       
            N/A   avgt   10     103.978 ±    0.507   ms/op
o.a.g.perf.PropertyAccessBench.fieldReadWrite                                   
            N/A   avgt   10       2.601 ±    0.093   ms/op
o.a.g.perf.PropertyAccessBench.getterSetterAccess                               
            N/A   avgt   10     114.794 ±    1.944   ms/op
o.a.g.perf.PropertyAccessBench.mapDotPropertyAccess                             
            N/A   avgt   10      18.558 ±    0.564   ms/op
o.a.g.perf.PropertyAccessBench.mapStyleAccess                                   
            N/A   avgt   10      31.028 ±    1.454   ms/op
o.a.g.perf.RunnerRegistryBench.listIterator                                     
            N/A   avgt   10      ≈ 10⁻⁶              ms/op
o.a.g.perf.RunnerRegistryBench.registryIterator                                 
            N/A   avgt   10      ≈ 10⁻⁵              ms/op
{noformat}


> Groovy 4 runtime performance on average 2.4x slower than Groovy 3
> -----------------------------------------------------------------
>
>                 Key: GROOVY-10307
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10307
>             Project: Groovy
>          Issue Type: Bug
>          Components: bytecode, performance
>    Affects Versions: 4.0.0-beta-1, 3.0.9
>         Environment: OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 
> (build 11.0.11+9)
> OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
> WIN10 (tests) / REL 8 (web application)
> IntelliJ 2021.2 
>            Reporter: mgroovy
>            Priority: Major
>         Attachments: groovy_3_0_9_gc.png, groovy_3_0_9_loop2.png, 
> groovy_3_0_9_loop4.png, groovy_3_0_9_mem.png, groovy_4_0_0_b1_loop2.png, 
> groovy_4_0_0_b1_loop4.png, groovy_4_0_0_b1_loop4_gc.png, 
> groovy_4_0_0_b1_loop4_mem.png, 
> groovysql_performance_groovy4_2_xx_yy_zzzz.groovy, loops.groovy, 
> profile3.txt, profile4-loops.txt, profile4.txt, profile4d.txt
>
>
> Groovy 4.0.0-beta-1 runtime performance in our framework is on average 2 to 3 
> times slower compared to using Groovy 3.0.9 (regular i.e. non-INDY)
> * Our complete framework and application code is completely written in 
> Groovy, spread over multiple IntelliJ modules
> ** mixed @CompileDynamic/@TypeChecked and @CompileStatic
> ** No Java classes left in project, i.e. no cross compilation occurs
> * We build using IntelliJ 2021.2 Groovy build process, then run / deploy the 
> compiled class files
> ** We do _not_ use a Groovy based DSL, nor do we execute Groovy scripts 
> during execution
> * Performance degradation when using Groovy 4.0.0-beta-1 instead of Groovy 
> 3.0.9 (non-INDY):
> ** The performance of the largest of our web applications has dropped 3x 
> (startup) / 2x (table refresh) respectively
> *** Stack: Tomcat/Vaadin/Ebean plus framework generated SQL
> ** Our test suite runs about 2.4 times as long as before (120 min when using 
> G4, compared to about 50 min with G3)
> *** JUnit 5 
> *** test suite also contains no scripts / dynamic code execution
> *** Individual test performance varies: A small number of tests runs faster, 
> but the majority is slower, with some extreme cases taking nearly 10x as long 
> to finish
> * Using Groovy 3.0.9 INDY displays nearly identical performance degradation, 
> so it seems that the use of invoke dynamic is somehow at fault



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to