JDK-8254167 : G1: Record regions where evacuation failed to provide targeted iteration
  • Type: Sub-task
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 16
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2020-10-07
  • Updated: 2022-01-11
  • Resolved: 2021-09-08
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 18
18 b14Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Relates :  
Description
At the end of gc we need to iterate over all regions where evacuation failed to fix up self-forwarded pointers.

Currently, particularly after JDK-8254164, we iterate over all collection set regions in parallel with all threads.

This is a problem with current work distribution: since we do not know how many regions with actual work there are, we spin up all available threads, with no idea

- which thread gets to do which region.
- how much work is actually there, causing issues with synchronization of spinning up and down lots of threads unnecessarily

Comments
Changeset: a66629a4 Author: Hamlin Li <mli@openjdk.org> Date: 2021-09-08 08:01:18 +0000 URL: https://git.openjdk.java.net/jdk/commit/a66629a464b97176bcdc2ca1150d12df6241dc1c
08-09-2021

JDK-8265461 now provides a worker thread estimate: it uses the number of regions failing evacuation failure. However these workers still need to traverse the whole region map to actually find these regions. This could be improved by storing the failing region ids (or HeapRegion*) in some side table.
30-04-2021