JDK-7112743 : G1: Reduce overhead of marking closure during evacuation pauses
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 7u4
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2011-11-16
  • Updated: 2013-10-04
  • Resolved: 2012-01-20
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
Related Reports
Relates :  
While running a workload that was designed to see how the GC performs when the heap occupancy was at 60% of capacity, there were several *long* evacuation pauses where the major contributor to the duration of the pause was "Other" time.

During the workload run (which was for a 26Gb heap, 18 GC workers), "Other" times of ~1800ms were not uncommon. The crucial pattern was that these lonbg pauses were always seen during marking cycles.

An investigation indicated that the main culprit was the "complete_marking_in_collection_set" closure, and this was confirmed with some changes to the PrintGCDetails output. The reason why this code was taking so long is that it is current purely a serial iteration over the collection set.

Since this code will be going away when the changes foir 6888336 are implemented, it has been decided that a quick fix would be to parallelize the existing serial code.

EVALUATION http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/dc467e8b2c5e

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-emb/hotspot/rev/dc467e8b2c5e

EVALUATION http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot/rev/dc467e8b2c5e

SUGGESTED FIX Parallelize complete_marking_in_collction_set using an abstract gang task. Have each worker thread iterate over the collection set claiming region. If a worker successfully claims a region then execute code similar to the CompleMarkingInCSHRClosure::do_HeapRegion. The "mark" call in the existing code will have to changed to use "parMark" but the rest can remain relatively unchanged.

EVALUATION Parallelize existing serial ConcurrentMark::complete_marking_in_collection_set().