RFR: 8254739: G1: Optimize evacuation failure for regions with few failed objects [v19]

Thomas Schatzl tschatzl at openjdk.java.net
Fri Nov 5 11:15:20 UTC 2021

On Fri, 5 Nov 2021 11:02:26 GMT, Hamlin Li <mli at openjdk.org> wrote:

>> Since `drop_all()` resets all counters (e.g. `_num_allocated_nodes`), the subsequent iteration will think the array is empty, won't it?
> For example, we modify the code as below:
>> void HeapRegion::iterate_evac_failure_objs(ObjectClosure* closure) {
>>   _evac_failure_objs.iterate(closure);
>>   _evac_failure_objs.iterate(closure);
>> }
> For the second time iteration, all thing will be empty, so iterate_nodes will be an empty operation, QuickSort::sort too,  and iterate_internal too. These empty operations will not do harm things.

@Hamlin-Li : I think @albertnetymk concern is that typically an `iterate` method does not modify the list itself. That is surprising for readers. The documentation also does not indicate any of that. I do not think he believes this will cause a VM failure.

Maybe change `HeapRegion::iterate_evac_failure_objs` to call a (new) `drop()` method on `_evac_failure_objs`?

I think such a change would solve Albert's concerns.

An alternative could be renaming `iterate` to something else.


PR: https://git.openjdk.java.net/jdk/pull/5181

More information about the hotspot-gc-dev mailing list