[
https://issues.apache.org/jira/browse/GROOVY-10307?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18058772#comment-18058772
]
ASF GitHub Bot commented on GROOVY-10307:
-----------------------------------------
jamesfredley opened a new pull request, #2381:
URL: https://github.com/apache/groovy/pull/2381
https://issues.apache.org/jira/browse/GROOVY-10307
Adds 7 JMH benchmark files to the `performance` subproject covering common
Groovy patterns exercised through invokedynamic. These benchmarks complement
the existing `org.apache.groovy.bench` suite (Ackermann, Ary, Fibo,
GeneratedHashCode, Callsite) by focusing on Groovy-specific language features.
Run with: `./gradlew perf:jmh -PbenchInclude=perf`
## Benchmark Files
| File | Benchmarks | Coverage |
|------|-----------|----------|
| `ClosureBench` | 19 | Creation, reuse, multi-param, capture, delegation,
nesting, method-ref, curry/rcurry, composition, spread, trampoline,
each/collect/findAll/inject |
| `LoopsBench` | 5 | Closure-in-loop vs method-in-loop, nested iteration,
call site caching |
| `MethodInvocationBench` | 9 | Instance, static, parameterized, overloaded,
monomorphic/polymorphic call sites, interface dispatch, dynamic-typed |
| `GStringBench` | 5 | Simple/multi-value interpolation, string-concat
baseline, map-key usage, repeated toString |
| `PropertyAccessBench` | 6 | Field read/write, getter/setter,
dynamic-typed, map bracket/dot-property, chained access |
| `OperatorBench` | 13 | Arithmetic, BigDecimal, string multiply, list/map
getAt/putAt, left-shift, equals, spaceship, comparison, unary minus,
in-operator |
| `GroovyIdiomBench` | 17 | Safe navigation (?.), spread-dot (*.), elvis
(?:), with/tap, range creation/iteration/contains, as-coercion |
**74 benchmarks total**, all using proper `Blackhole` consumption to prevent
dead-code elimination.
> 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)