RFR: 8318706: Implementation of JDK-8276094: JEP 423: Region Pinning for G1 [v2]

Albert Mingkun Yang ayang at openjdk.org
Mon Oct 30 13:50:14 UTC 2023


On Mon, 30 Oct 2023 13:25:07 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:

>> src/hotspot/share/gc/g1/g1EvacFailureRegions.hpp line 36:
>> 
>>> 34: class HeapRegionClaimer;
>>> 35: 
>>> 36: // This class records for every region on the heap whether it has to be retained
>> 
>> I feel the term "retain" has two diff meanings in this PR:
>> 
>> 1. retain == pinned or evac-fail
>> 2. should_retain_evac_failed_region
>> 
>> 1 is during scavenging while 2 is after scavenging.
>
> Maybe rename `should_retain_evac_failed_region` to `should_keep_retained_region[_in_old]` or something?

Is it possible to drop 1 so that an obj is evac-fail iff it's pinned or OOM? (I feel "retain" is on region-level.)

>> src/hotspot/share/gc/g1/g1FullGCPrepareTask.inline.hpp line 82:
>> 
>>> 80:   } else {
>>> 81:     assert(hr->containing_set() == nullptr, "already cleared by PrepareRegionsClosure");
>>> 82:     if (hr->has_pinned_objects() ||
>> 
>> This `do_heap_region` method is hard to follow; there multiple occurrences of same predicates. I wonder if one can reorganize these if-else a bit. Inlining `should_compact` should make all `if` on the same level at least.
>
> Apart from having an early return in the `should_compact`-if, one option would be making `has_pinned_objects()` more clever by stating something like:
> 
> 
>   bool has_pinned_objects() const {
>     return pinned_count() > 0 || (is_continues_humongous() && humongous_start_region()->pinned_count() > 0);
>   }
> 
> 
> Then this predicate would get shorter. Or add a local helper for that (as suggested in the next commit). Either is fine with me.

A local helper is possibly clearer here, IMO.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16342#discussion_r1376247318
PR Review Comment: https://git.openjdk.org/jdk/pull/16342#discussion_r1376251206


More information about the serviceability-dev mailing list