RFR: 8307348 - Parallelize heap walk for ObjectCount(AfterGC) JFR event collection [v6]
Aleksey Shipilev
shade at openjdk.org
Fri May 5 12:18:17 UTC 2023
On Fri, 5 May 2023 11:55:14 GMT, olivergillespie <duke at openjdk.org> wrote:
>> ObjectCount(AfterGC) event does a full single-threaded heap scan at a safepoint. After https://bugs.openjdk.org/browse/JDK-8215624, it is trivial to use the parallel version of the heap scan, reducing the time spent at the safepoint, and thus reducing the overhead of this event.
>>
>> The performance improvement is obvious, but just for confirmation, on my 16-core host, at around 1GB occupancy:
>>
>>
>> Before: 770ms ( [3.059s][debug][gc,phases ] GC(13) Report Object Count 770.317ms )
>> After: 92ms ( [2.335s][debug][gc,phases ] GC(13) Report Object Count 91.742ms )
>>
>>
>> Question 1: Should this be the default behaviour for populate_table (use the number active workers as the parallelism, if nothing else specified)?
>>
>> Question 2: Is active_workers the correct value to use here? Or is max_workers more appropriate?
>
> olivergillespie has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix imports
This looks better to me. Some comments:
src/hotspot/share/memory/heapInspection.cpp line 569:
> 567: uintx HeapInspection::populate_table(KlassInfoTable* cit, BoolObjectClosure *filter, WorkerThreads* workers) {
> 568: // Try parallel first.
> 569: ResourceMark rm;
I think this `ResourceMark` should remain at both blocks. So that on failed exit from the parallel block, we rollback resource allocations and start over with serial walk.
-------------
PR Review: https://git.openjdk.org/jdk/pull/13774#pullrequestreview-1414674820
PR Review Comment: https://git.openjdk.org/jdk/pull/13774#discussion_r1186021364
More information about the hotspot-gc-dev
mailing list