RFR: Add generations to freeset [v8]

William Kemper wkemper at openjdk.org
Thu Apr 20 18:13:22 UTC 2023


On Wed, 19 Apr 2023 15:27:57 GMT, Kelvin Nilsen <kdnilsen at openjdk.org> wrote:

>> ShenandoahFreeSet has not yet been modified to deal efficiently with the combination of old-gen and young-gen collection set reserves.  This PR makes changes so that we can distinguish between collector_is_free, old_collector_is_free, and mutator_is_free.  Further, it endeavors to keep each set of free regions tightly packed, so the range of regions representing each set is small.
>> 
>> In its current form, this no longer fails existing regression tests (except for known problems that are being addressed independently)
>
> Kelvin Nilsen has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 207 commits:
> 
>  - Merge remote-tracking branch 'origin' into add-generations-to-freeset
>  - Respond to reviewer feedback
>    
>    Various improvements suggested by reviewers.  Mostly improved comments
>    and some minor refactoring.
>  - Add TODO comment for exapnsion of old-gen
>  - Remove debug instrumentation
>  - Merge master
>  - Fix calculation of minimum fill size
>    
>    We were incorrectly using byte size rather than word size.
>  - Fix error in ShenandoahFreeSet usage accounting
>    
>    We were incorrectly increasing used for plab padding.  That is
>    old_collector memory and should not affect mutator usage.  This commit
>    also includes some refactoring, additional assertions, and additional
>    verification of consistent free-space accounting.
>  - Fix typo in a comment
>  - Fix white space
>  - Merge remote-tracking branch 'GitFarmBranch/add-generations-to-freeset' into add-generations-to-freeset
>  - ... and 197 more: https://git.openjdk.org/shenandoah/compare/016bf071...7319eeeb

src/hotspot/share/gc/shenandoah/shenandoahFreeSet.cpp line 610:

> 608: 
> 609: // If idx represents a collector bound, recompute the collector bounds, returning true iff bounds were adjusted.
> 610: bool ShenandoahFreeSet::adjust_collector_bounds_if_touched(size_t idx) {

This really feels like there should be a `RegionFreeSet` class with instances for `mutator`, `collector`, and `old_collector`. There's a lot of code duplication here. A refactoring for another PR.

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

PR Review Comment: https://git.openjdk.org/shenandoah/pull/250#discussion_r1172935802


More information about the shenandoah-dev mailing list