You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@grails.apache.org by "jamesfredley (via GitHub)" <gi...@apache.org> on 2026/01/01 23:30:46 UTC

Re: [I] Groovy - invoke dynamic performance problems [grails-core]

jamesfredley commented on issue #15293:
URL: https://github.com/apache/grails-core/issues/15293#issuecomment-3704230195

   I see similar performance levels when optimizing the Grails 7 test application with `-Dgroovy.indy.optimize.threshold=0 -Dgroovy.indy.fallback.threshold=0` and `optimizationOptions.indy = false`.  In my testing Java 25 provides ~23% performance improvement over Java 17, but not enough to resolve the 4x performance hit by itself.  `optimizationOptions.indy = false` was ~6.5x faster than without any optimization on Java 25
   
   
   To help with further debugging I ran with `-Dgroovy.indy.logging=true -Dgroovy.indy.debug=true` and without the other optimizations.  Additionally I updated `spring-logback.xml` to log to a file at Log level INFO.  This generates >500MB of logs during application startup and the initial loading of data.  
   
   Here are two 100MB compressed logs and hopefully these can help. `call site stays uncached` appears throughout both files.
   
   ```
   2026-01-01T17:47:11.376-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : meta class is groovy.lang.MetaClassImpl@1bbaf0d3[class grails7.performance.Task]
   2026-01-01T17:47:11.376-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : selection base set to class grails7.performance.Task
   2026-01-01T17:47:11.376-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : meta class is a recognized MetaClassImpl
   2026-01-01T17:47:11.376-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : meta method is category type method: false
   2026-01-01T17:47:11.376-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : meta method is static category type method: false
   2026-01-01T17:47:11.376-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : meta method is CachedMethod instance
   2026-01-01T17:47:11.376-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : successfully unreflected method
   2026-01-01T17:47:11.377-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : casting explicit from (Task)String to (Object)Object
   2026-01-01T17:47:11.377-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : added GroovyRuntimeException unwrapper
   2026-01-01T17:47:11.377-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : added meta class equality check
   2026-01-01T17:47:11.377-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : added switch point guard
   2026-01-01T17:47:11.377-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : added same-class argument check
   2026-01-01T17:47:11.377-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : call site stays uncached
   2026-01-01T17:47:11.377-05:00  INFO 6648 --- [http-nio-8080-exec-1] o.c.groovy.vmplugin.v8.IndyInterface     : ----------------------------------------------------
   		invocation of method 'status'
   		invocation type: GET
   		sender: class grails7.performance.PerformanceTestService$_getProjectMetrics_closure12$_closure59
   		targetType: (Object)Object
   		safe navigation: false
   		thisCall: false
   		spreadCall: false
   		with 1 arguments
   			argument[0] = grails7.performance.Task@352260d
   
   ```
   
   During application startup and initial data loading: [performance-test-app.log.2026-01-01.0.gz](https://github.com/user-attachments/files/24403283/performance-test-app.log.2026-01-01.0.gz)
   
   While running `localhost:8080/performanceTest/benchmark?pretty=true`: [performance-test-app.log.2026-01-01.10.gz](https://github.com/user-attachments/files/24403284/performance-test-app.log.2026-01-01.10.gz)
   
   When you run with with `-Dgroovy.indy.logging=true -Dgroovy.indy.debug=true -Dgroovy.indy.optimize.threshold=0 -Dgroovy.indy.fallback.threshold=0` you see the following during startup and initial data loading
   
   
   ```
   2026-01-01T18:23:52.866-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : added meta class equality check
   2026-01-01T18:23:52.866-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : added switch point guard
   2026-01-01T18:23:52.866-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : added same-class argument check
   2026-01-01T18:23:52.866-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : call site stays uncached
   2026-01-01T18:23:52.866-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : call site target reset to default, preparing outside invocation
   2026-01-01T18:23:52.867-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : call site target set, preparing outside invocation
   2026-01-01T18:23:52.867-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : call site target set, preparing outside invocation
   2026-01-01T18:23:52.867-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : call site target set, preparing outside invocation
   2026-01-01T18:23:52.867-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : call site target set, preparing outside invocation
   2026-01-01T18:23:52.867-05:00  INFO 42964 --- [main] o.c.groovy.vmplugin.v8.IndyInterface     : ----------------------------------------------------
   		invocation of method ''
   		invocation type: CAST
   		sender: class org.codehaus.groovy.vmplugin.v8.Selector
   		targetType: (Object)DirtyCheckable
   		safe navigation: false
   		thisCall: false
   		spreadCall: false
   		with 1 arguments
   			argument[0] = grails7.performance.Project@28a44bb8
   ```
   
   
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org