[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-serviceability-dev
Subject: RFR: JDK-8307314: Implementation: Generational Shenandoah (Experimental)
From: Kelvin Nilsen <kdnilsen () openjdk ! org>
Date: 2023-05-30 17:54:18
Message-ID: QIBdWpBu7uNDXEv8I4qYAcF5fQK8xsebniV6DfU6hl4=.2461c43f-c20c-497a-88e8-dd0f1222303c () github ! com
[Download RAW message or body]
OpenJDK Colleagues:
Please review this proposed integration of Generational mode for Shenandoah GC under \
https://bugs.openjdk.org/browse/JDK-8307314.
Generational mode of Shenandoah is enabled by adding \
`-XX:+UnlockExperimentalVMOptions -XX:ShenandoahGCMode=generational` to a command \
line that already specifies ` -XX:+UseShenandoahGC`. The implementation \
automatically adjusts the sizes of old generation and young generation to efficiently \
utilize the entire heap capacity. Generational mode of Shenandoah resembles G1 in \
the following regards:
1. Old-generation marking runs concurrently during the time that multiple young \
generation collections run to completion. 2. After old-generation marking completes, \
we perform a sequence of mixed collections. Each mixed collection combines \
collection of young generation with evacuation of a portion of the old-generation \
regions identified for collection based on old-generation marking information. 3. \
Unlike G1, young-generation collections and evacuations are entirely concurrent, as \
with single-generation Shenandoah. 4. As with single-generation Shenandoah, there is \
no explicit notion of eden and survivor space within the young generation. In \
practice, regions that were most recently allocated tend to have large amounts of \
garbage and these regions tend to be collected with very little effort. \
Young-generation objects that survive garbage collection tend to accumulate in \
regions that hold survivor objects. These regions tend to have smaller amounts of \
garbage, and are less likely to be collected. If they survive a sufficient number of \
young-generation collections, the "survivor" regions are promoted into the old \
generation.
We expect to refine heuristics as we gain experience with more production workloads. \
In the future, we plan to remove the "experimental" qualifier from generational mode, \
at which time we expect that generational mode will become the default mode for \
Shenandoah.
**Testing**: We continuously run jtreg tiers 1-4 + hotspot_gc_shenandoah, gcstress, \
jck compiler, jck runtime, Dacapo, SpecJBB, SpecVM, Extremem, HyperAlloc, and \
multiple AWS production workload simulators. We test on Linux x64 and aarch64, Alpine \
x64 and aarch64, macOS x64 and aarch64, and Windows x64.
-------------
Commit messages:
- Revert changes to jcheck configuration
- Remove early planning docs from PR
- Merge remote-tracking branch 'shenandoah/master' into \
merge-generational-shenandoah
- Expand old on demand
- Merge openjdk/jdk:master
- Make generational mode experimental
- Merge openjdk/jdk:master
- Improve mixed collection logging
- Use soft max capacity only for trigger calculations
- Use static assert to validate card offset encoding mask
- ... and 281 more: https://git.openjdk.org/jdk/compare/ce5251af...aa85a907
Changes: https://git.openjdk.org/jdk/pull/14185/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14185&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8307314
Stats: 20150 lines in 205 files changed: 18237 ins; 904 del; 1009 mod
Patch: https://git.openjdk.org/jdk/pull/14185.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/14185/head:pull/14185
PR: https://git.openjdk.org/jdk/pull/14185
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic