RFR: 8337511: Implement JEP 404: Generational Shenandoah (Experimental) [v7]

Aleksey Shipilev shade at openjdk.org
Thu Nov 14 19:34:13 UTC 2024


On Wed, 13 Nov 2024 19:32:53 GMT, William Kemper <wkemper at openjdk.org> wrote:

>> This PR merges JEP 404, a generational mode for the Shenandoah garbage collector. The JEP can be viewed here: https://openjdk.org/jeps/404. We would like to target JDK24 with this PR.
>
> William Kemper has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 510 commits:
> 
>  - Merge branch 'merge-latest' into great-genshen-pr-redux
>  - Use new CompactHeader forwarding APIs in generational mode
>  - Merge remote-tracking branch 'jdk/master' into merge-latest
>  - Merge
>  - 8343649: Shenandoah: ShenandoahEvacInfo event does not follow JFR guidelines
>    
>    Reviewed-by: wkemper
>  - Merge
>  - 8343227: GenShen: Fold resource mark into management of preselected regions
>    
>    Reviewed-by: kdnilsen
>  - Merge openjdk/jdk tip into great-genshen-pr-redux
>  - Merge remote-tracking branch 'jdk/master' into merge-latest
>  - Merge remote-tracking branch 'jdk/master' into merge-latest
>  - ... and 500 more: https://git.openjdk.org/jdk/compare/889f9062...5e02b5d8

More reviews...

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

> 139:   dst->increase_capacity(bytes_to_transfer);
> 140:   const size_t new_size = dst->max_capacity();
> 141:   log_info(gc)("Transfer " SIZE_FORMAT " region(s) from %s to %s, yielding increased size: " PROPERFMT,

This should not be `log_info(gc)`. In fact, please look at other places where you print logging. Generally, `log_info(gc)` should provide _only_ the high-level GC info: which phases were running. Everything else should go under `log_debug(gc)`.

src/hotspot/share/gc/shenandoah/shenandoahSTWMark.cpp line 140:

> 138:       break;
> 139:     }
> 140:     case OLD:

Are we not doing OLD STW mark? Deserves a comment.

src/hotspot/share/gc/shenandoah/shenandoahYoungGeneration.hpp line 54:

> 52:   void parallel_heap_region_iterate(ShenandoahHeapRegionClosure* cl) override;
> 53: 
> 54:   void parallel_region_iterate_free(ShenandoahHeapRegionClosure* cl) override;

Is this a sibling of `parallel_heap_region_iterate`? Shouldn't these be called `parallel_heap_region_iterate_free`?

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

PR Review: https://git.openjdk.org/jdk/pull/21273#pullrequestreview-2436882261
PR Review Comment: https://git.openjdk.org/jdk/pull/21273#discussion_r1842779639
PR Review Comment: https://git.openjdk.org/jdk/pull/21273#discussion_r1842701030
PR Review Comment: https://git.openjdk.org/jdk/pull/21273#discussion_r1842704295


More information about the shenandoah-dev mailing list