RFR: 8352185: Shenandoah: Invalid logic for remembered set verification [v13]

Xiaolong Peng xpeng at openjdk.org
Wed Mar 26 20:49:17 UTC 2025


On Wed, 26 Mar 2025 00:44:18 GMT, Y. Srinivas Ramakrishna <ysr at openjdk.org> wrote:

>> Xiaolong Peng has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   tide up
>
> src/hotspot/share/gc/shenandoah/shenandoahVerifier.cpp line 1060:
> 
>> 1058:   VerifyRememberedSet verify_remembered_set = _verify_remembered_before_marking;
>> 1059:   if (_heap->mode()->is_generational() &&
>> 1060:       !_heap->old_generation()->is_mark_complete()) {
> 
> Why not the following stronger condition to skip verification? My sense is that the only case we cannot verify is if we do not have marking info _and_ old gen has been left "unparsable" (because of an incomplete/interrupted C&F which may have us look at dead objects -- that are either unparsable because of class unloading, or are parsable but hold cross-gen pointers). In all other cases, we can do a safe and complete verification.
> 
> 
>    is_generational() && !old_gen->is_mark_complete() && !old_gen->is_parsable()

We may not need to worry about it, old_gen becomes not parsable in class unloading phase of a global concurrent GC, marking is already done for the global including old gen, there should be always complete marking for old when  old gen is not parsable.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24092#discussion_r2014974376


More information about the shenandoah-dev mailing list