On Wed, 9 Apr 2025 14:32:43 GMT, Thomas Schatzl <tscha...@openjdk.org> wrote:

>> src/hotspot/share/gc/g1/g1ConcurrentRefineSweepTask.cpp line 83:
>> 
>>> 81:         break;
>>> 82:       }
>>> 83:       case G1RemSet::HasRefToOld : break; // Nothing special to do.
>> 
>> Why doesn't call `inc_cards_clean_again` in this case? The card is cleared 
>> also. (In fact, I don't get why this needs to a separate case from 
>> `NoInteresting`.)
>
> "NoInteresting" means that the card contains no interesting reference at all. 
> "HasRefToOld" means that there has been an interesting reference in the card.
> 
> The distinction between these groups of cards seems interesting to me. E.g. 
> out of X non-clean cards, there were A with a reference to the collection 
> set, B that were already marked as containing a card to the collection, C not 
> having any interesting card any more (transitioned from clean -> dirty -> 
> clean, and cleared by the mutator), D being non-parsable, and E having 
> references to old (and no other references).
> 
> I could add a separate counter for these type of cards too - they can be 
> inferred from the total number of scanned minus the others though.

I see; "clean again" means the existing interesting pointer was overwritten by 
mutator.

I misinterpret the comment as cards transitioned from dirty to clean. `  size_t 
_cards_clean_again;          // Dirtied cards that were cleaned.`

To prevent misunderstanding, what do you think of renaming "NoInteresting" to 
"NoCrossRegion" and "_cards_clean_again" to "_cards_no_cross_region", or sth 
alike so that the 1:1 mapping is clearer?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23739#discussion_r2036885633

Reply via email to