United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7006113 G1: Initialize ReferenceProcessor::_is_alive_non_header field
JDK-7006113 : G1: Initialize ReferenceProcessor::_is_alive_non_header field

Details
Type:
Enhancement
Submit Date:
2010-12-10
Status:
Closed
Updated Date:
2011-04-23
Project Name:
JDK
Resolved Date:
2011-04-23
Component:
hotspot
OS:
generic
Sub-Component:
gc
CPU:
generic
Priority:
P4
Resolution:
Fixed
Affected Versions:
7-pool
Fixed Versions:
hs20 (b05)

Related Reports
Backport:
Backport:

Sub Tasks

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
SUGGESTED FIX

Initialize the _is_alive_non_header field of the G1 reference processor instance with an instance of the G1CMIsAliveClosure.
                                     
2010-12-10
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.
                                     
2010-12-17
EVALUATION

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



Hardware and Software, Engineered to Work Together