JDK-6990359 : G1: don't push a stolen entry on the taskqueue, deal with it directly
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: hs20
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2010-10-07
  • Updated: 2013-09-18
  • Resolved: 2011-04-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 6 JDK 7 Other
6u25Fixed 7Fixed hs20Fixed
Description
Currently, when worker W steals an entry E from another worker's taskqueue, it pushes E on its own taskqueue before going into trim_queues() where the first thing it does is to pop E. This should work fine most of the time. However, it also opens a (very small) window for another workers to steal E from W. This might cause ping-ponging between workers. It might be better if W just deals with E directly, instead of pushing it on its taskqueue.

I also had a quick look at the marking code and it seems to do the "right" thing, i.e., not pushing the stolen entry but processing it directly.

(thanks to Igor Veresov for spotting this)

Comments
EVALUATION http://hg.openjdk.java.net/jdk7/build/hotspot/rev/35e4e086d5f5
04-12-2010

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/35e4e086d5f5
14-10-2010