RFR: 8314599: [GenShen] Couple adaptive tenuring and generation size budgeting [v10]
William Kemper
wkemper at openjdk.org
Tue Dec 2 18:29:21 UTC 2025
> Notable changes:
> * Improvements to logging
> * More accurate tracking of promotion failures
> * Use shared allocation for promotions only when the size is above the maximum plab size (not the minimum size)
> * Use census information gathered during mark to size promotion reserves and old generation
>
> With these changes, GenShen is expected to have fewer promotion failures and this is indeed the case. As a result of this, we expect less time to be spent in concurrent marking and update refs for young collections. We may also expect shorter concurrent evacuation phases because GenShen will have fewer densely packed regions stuck in the young generation. With more objects being promoted, we also expect to see longer remembered set scan times. This is generally the case across all benchmarks, but we do also see some counter-intuitive results.
>
> Here we are comparing 20 executions (10 on x86, 10 on aarch64) of the changes in the PR (experiment) against 20 executions of the same benchmarks results from tip. This is a summary of statistically significant changes of more than 5% across all benchmarks:
>
>
> Concurrent Evacuation: 7 improvements, 3 regressions
> • Best improvements: extremem-large-45g (-29.6%), neo4j-analytics (-26.9%)
> • Worst regression: xalan (+53.7%)
>
> Concurrent Marking: 15 improvements, 1 regression
> • Best improvements: hyperalloc_a2048_o4096 (-30.1%), crypto.rsa (-27.3%)
> • Only regression: serial (+8.9%)
>
> Concurrent Scan Remembered Set: 7 improvements, 2 regressions
> • Best improvements: xalan (-49.4%), pmd (-49.0%), crypto.rsa (-41.8%)
> • Worst regression: extremem-phased (+52.4%)
>
> Concurrent Update Refs: 5 improvements, 4 regressions
> • Best improvements: crypto.rsa (-36.4%), mnemonics (-28.4%)
> • Worst regression: xalan (+89.4%)
William Kemper has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 73 commits:
- Merge remote-tracking branch 'jdk/master' into promotion-budget-improvements
- Adaptive tenuring is no longer optional
We are using age census data to compute promotion reserves. The tenuring threshold may still be fixed by setting the min/max threshold to the same value.
- Remove bad asserts
- Don't include tenurable bytes for current cycle in the next cycle
Also remove vestigial promotion potential calculation
- Idle fix ups
- Merge remote-tracking branch 'jdk/master' into promotion-budget-improvements
- Disable assertion (will revisit later)
- Print global evac tracking after other gc stats
This makes it easier for parsers to distinguish from per cycle reports
- Instrumentation and assertions
- Idle cleanup as I read
- ... and 63 more: https://git.openjdk.org/jdk/compare/5627ff2d...0c682e1c
-------------
Changes: https://git.openjdk.org/jdk/pull/27632/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27632&range=09
Stats: 406 lines in 11 files changed: 166 ins; 182 del; 58 mod
Patch: https://git.openjdk.org/jdk/pull/27632.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/27632/head:pull/27632
PR: https://git.openjdk.org/jdk/pull/27632
More information about the shenandoah-dev
mailing list