[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