JDK-7006113 : G1: Initialize ReferenceProcessor::_is_alive_non_header field
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 7-pool
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2010-12-10
  • Updated: 2013-09-18
  • Resolved: 2011-04-23
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
When reference discovery is enabled during concurrent marking reference objects whose referents are alive are enqueued on the discovered reference lists unnecessarily. This can increase the times of the remark pauses - where the discovered reference lists are walked and references with live referents removed.

In the ReferenceProcessor class there is a field called _is_alive_non_header. This field is initialized with a closure that, given an object, determines whether that object is alive using the concurrent marking data structures.

The query method of the _is_alive_non_header closure is called during concurrent reference discovery (by ReferenceProcessor::discover_reference) and is used to filter those reference objects whose referents are already known to be alive according to the non object header based marking.

Specifying a value for this closure can have two potential benefits:
  * the most obvious is that less objects will be placed on the discovered reference
    lists, reducing the amount of time doing actual reference processing.
  * it causes the ReferenceProcessor::discover_reference routine to return
    early (short circuit some of the later checks in discover_reference).
    Since ReferenceProcessor::discover_reference is called for every reference
    object, this may have tiny positive affect on the duration of concurrent
    marking.

Comments
EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/b03260081e9b
18-12-2010

EVALUATION Initialize the _is_alive_non_header field of G1's reference processor to stop adding reference objects with live referents to discovered lists unnecessarily.
17-12-2010

SUGGESTED FIX Initialize the _is_alive_non_header field of the G1 reference processor instance with an instance of the G1CMIsAliveClosure.
10-12-2010