JDK-7121496 : G1: do the per-region evacuation failure handling work in parallel
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: hs23
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2011-12-14
  • Updated: 2013-10-04
  • Resolved: 2012-03-29
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 7 JDK 8 Other
7u4Fixed 8Fixed hs23Fixed
Description
When there's an evacuation failure during a GC we have to scan all the regions in the CSet in order to remove the self-forwarding references of any object we failed to move and also update according a few other data structures (marking bitmap(s), BOT, etc.).

Currently, we do this serially, one region at a time. However, the per-region work is independent of the rest. So, it should be trivial to parallelize.

Comments
EVALUATION http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/023652e49ac0
22-03-2012

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/023652e49ac0
18-01-2012

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot/rev/023652e49ac0
07-01-2012

SUGGESTED FIX Wrap the kernel of the loop (that iterates over the regions in the colection set) into the doHeapRegion method of a HeapRegion closure. The doHeapRegion method will need to claim regions and apply the loop-kernal code to a successfully claimed region. Wrap the HeapRegion closure into an AbstractGangTask whose work method will start iterating over the collection set from a given starting region (based upon worker ID). Each worker will also need its own DirtyCardQueue (for deferred RSet updates).
23-12-2011

EVALUATION Wrap the kernel of the loop (that iterates over the regions in the colection set) into the doHeapRegion method of a HeapRegion closure. The doHeapRegion method will need to claim regions and apply the loop-kernal code to a successfully claimed region. Wrap the HeapRegion closure into an AbstractGangTask whose work method will start iterating over the collection set from a given starting region (based upon worker ID). Each worker will also need its own DirtyCardQueue (for deferred RSet updates).
23-12-2011