RFR: 8371381: [Shenandoah] Setting ergo flags should use FLAG_SET_ERGO

Rui Li duke at openjdk.org
Tue Nov 11 23:44:02 UTC 2025


On Tue, 11 Nov 2025 23:06:25 GMT, William Kemper <wkemper at openjdk.org> wrote:

>> Setting ergo flags using `FLAG_SET_ERGO`, instead of `FLAG_SET_DEFAULT`, so we can have the right origin info.
>> 
>> Had to expand `ShenandoahEvacReserve` range from `range(1,100)` to `range(0,100)` because when we use shenandoah passive mode and degen is also turned off (`-XX:ShenandoahGCMode=passive -XX:-ShenandoahDegeneratedGC`), we set the ShenandoahEvacReserve to 0:  https://github.com/openjdk/jdk/blob/c6a8027b94bbcbde5f7dcabd0bff48b93bbb5a7f/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp#L41 The issue is surfaced now because `FLAG_SET_DEFAULT` doesn't check the range but `FLAG_SET_ERGO` does.
>> 
>> Testing: jtreg gc. GHA pending.
>
> src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp line 356:
> 
>> 354:           "regions) is also bounded by this parameter.  In percents of "    \
>> 355:           "total (young-generation) heap size.")                            \
>> 356:           range(0,100)                                                      \
> 
> If we allow this, somebody _will_ file a bug because `-XX:ShenandoahEvacReserve=0` will cause other modes to crash with divide by zero error.

OK, I'll keep the range as it is `(1,100)`, but instead of setting the default with ergo at here: https://github.com/openjdk/jdk/blob/c6a8027b94bbcbde5f7dcabd0bff48b93bbb5a7f/src/hotspot/share/gc/shenandoah/mode/shenandoahPassiveMode.cpp#L40-L42 I'll just use `FLAG_SET_DEFAULT` to bypass the check? We wouldn't have the data source origin in passive mode which is only meant to be diagnostic, but that's better than causing problems in the regular mode.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28242#discussion_r2516180561


More information about the hotspot-gc-dev mailing list