RFR: 8324649: Shenandoah: replace implementation of free set [v59]
Kelvin Nilsen
kdnilsen at openjdk.org
Wed May 15 13:55:19 UTC 2024
On Tue, 14 May 2024 00:03:47 GMT, Y. Srinivas Ramakrishna <ysr at openjdk.org> wrote:
>> Kelvin Nilsen has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Fix copyright notice on test file
>
> src/hotspot/share/gc/shenandoah/shenandoahFreeSet.cpp line 105:
>
>> 103: ShenandoahHeapRegion* r = _heap->get_region(idx);
>> 104: return can_allocate_from(r);
>> 105: }
>
> Some of this abstraction leakage can be avoided by making
>
> "can_allocate_from(size_t idx)" a method on the `_heap` object, and calling that, letting the heap do the test:
>
> ```
> bool ShenandoahHeap::can_allocate_from(size_t idx) {
> ShenandoahHeapRegion* r = get_region(idx);
> return r->is_empty() || (r->is_trash() && !is_concurrent_weak_root_in_progress());
> }
>
>
> with ShFreeSet merely delegating to its `_heap`.
>
> Probably similar pattern for `alloc_capacity` method below.
>
> (I'll keep leaving single comments, so I don't slow down the review/feedback across potential interruptions. I don't expect there will be many, but still.)
I'm not sure I understand the rationale for these changes. In my mind, the "notions" of can_allocate_from() and alloc_capacity() as used here within ShenandoahFreeSet are not universal. These notions are specific to what the free set understands about the life-cycle of regions. I think moving this functionality into heap actually leaks more encapsulation, in that nobody else cares to use these novel interpretations of can_allocate_from() and alloc_capacity().
Maybe you can elaborate?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17561#discussion_r1601696376
More information about the hotspot-gc-dev
mailing list