This is an automated email from the ASF dual-hosted git repository.
paulk-asert pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/groovy-website.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 28dd9f2 updated with recent changes for GROOVY-12151
28dd9f2 is described below
commit 28dd9f258b740217c4177d3bbe547d0abb1ca1eb
Author: Paul King <[email protected]>
AuthorDate: Thu Jul 16 14:54:22 2026 +1000
updated with recent changes for GROOVY-12151
---
site/src/site/wiki/GEP-27.adoc | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/site/src/site/wiki/GEP-27.adoc b/site/src/site/wiki/GEP-27.adoc
index e7dff31..94a4bed 100644
--- a/site/src/site/wiki/GEP-27.adoc
+++ b/site/src/site/wiki/GEP-27.adoc
@@ -493,9 +493,11 @@ diagnostics. The two headline capabilities are done:
constant bundle lazily on first use, and each literal's parameter-type
`Class[]` is a
constant-dynamic resolved once per site. The whole chain is ordinary,
JIT-friendly bytecode — no
reflection, and no per-instance `MethodHandle` (not constant-foldable, hence
many times slower).
- Measured with JMH against the generated classes it replaces (same build,
both compilations):
- capturing shapes run **1.4–1.9× faster packed** — the win holding under
megamorphic dispatch across
- many classes — while the tightest non-capturing `collect` trails at ~0.6×;
on Grails-shaped
+ Measured with JMH against the generated classes it replaces (same build,
both compilations,
+ re-measured after the fixed-arity family and dispatch-semantics hardening):
capturing shapes run
+ **1.4× or better packed**, mono and megamorphic alike (individual runs have
reached 1.9× against
+ slower classed baselines), while the tightest non-capturing `collect` trails
at 0.5–0.7× — a
+ hypersensitive-inlining micro-shape whose day-to-day tuning band that is; on
Grails-shaped
in-situ workloads (domain pipelines, validation cycles) the blend nets
**+17–23% packed** with
identical outputs, so the adverse micro-shape dilutes out under real work.
* *MOP transparency* — the direct dispatch path is semantically invisible: it
is taken only when the
@@ -911,10 +913,11 @@ the compatibility valve while tools are updated.
bytecode; the per-arity tables pass the receiver, captures and arguments as
plain parameters, so
the hot shapes allocate no argument array at all, and allocation sits at or
below the
closure-class baseline on capturing shapes.
-* Measured with JMH against the generated classes on the same build: capturing
shapes 1.4–1.9×
- faster packed (holding under megamorphic dispatch); tight non-capturing
`collect` ~0.6× — the
- MOP-transparency guard's loop-invariant checks, hoisted to zero when the
chain inlines. On
- Grails-shaped in-situ workloads the blend nets +17–23% packed with identical
outputs.
+* Measured with JMH against the generated classes on the same build: capturing
shapes 1.4× or
+ better packed (holding under megamorphic dispatch); tight non-capturing
`collect` 0.5–0.7× — the
+ MOP-transparency guard's loop-invariant checks, hoisted when the chain
inlines, on a shape whose
+ ratio swings with inline-budget details. On Grails-shaped in-situ workloads
the blend nets
+ +17–23% packed with identical outputs.
* MOP transparency has the same cost model as the classic call-site caches:
one latched-boolean and
one category-counter read decide between direct dispatch and the full
`invokeMethod` route, so
interception, categories and `respondsTo` behave identically to generated
closure classes.