RFR: 8348400: GenShen: assert(ShenandoahHeap::heap()->is_full_gc_in_progress() || (used_regions_size() <= _max_capacity)) failed: Cannot use more than capacity #

Kelvin Nilsen kdnilsen at openjdk.org
Tue Mar 11 21:01:53 UTC 2025


On Tue, 11 Mar 2025 19:54:20 GMT, William Kemper <wkemper at openjdk.org> wrote:

> Shenandoah cannot recycle immediate trash regions during the concurrent weak roots phase, however some of these regions may be assigned to the old generation collector's reserve. When an evacuation/promotion tries to allocate in such a region, it will fail (as expected) and try to 'steal' a region from the mutator's partition of the free set.  There are cases when this cannot be allowed due to capacity constraints. However, in some of these cases it will be possible to 'swap' a region between the old reserve and the mutator's partition. This change covers this case.

src/hotspot/share/gc/shenandoah/shenandoahGenerationSizer.cpp line 127:

> 125:   }
> 126: 
> 127:   if (dst->max_capacity() + bytes_to_transfer > max_size_for(dst)) {

Do we need to edit the descriptions of ShenandoahMinYoungPercentage and ShenandoahMaxYoungPercentage?  Do we need to remove these options entirely from shenandoah_globals?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/23998#discussion_r1990119862


More information about the shenandoah-dev mailing list