Request for review(M) - 6720334, 6720309

Igor Veresov Igor.Veresov at Sun.COM
Thu Feb 26 00:40:11 UTC 2009


Fixed 6720309: G1: don't synchronously update RSet during evacuation pauses
Fixed 6720334: G1: don't update RSets of collection set regions during an 
evacuation pause

During evacuation pauses in G1 the move of an object might cause remembered 
set entries to be updated. Right now, we do those synchronously (i.e, they 
are updated there and then and are visible at the end of the collection). 
Unfortunately, those synchronous updates impose a non-trivial overhead on the 
GC pauses. The fix uses the existing concurrent refinement thread to update 
RSets concurrently - the cards for the update objects are put into update 
buffers and processed after the collection.

In addition, we don't need to update remembered sets of any of the regions in 
the collection set. We explicitly keep track of references into the 
collection set during remembered set scanning, so there's no point in 
actually updating the remembered sets. Also, after the collection, all 
regions in the collection set will be reclaimed, along with their remembered 
set, so it is pointless to actually update their remembered sets.
However in the case of the evacuation failure we must perform these updates. 
The fix delays the updates until it's clear that the evacuation failure has 
occurred and schedules them to be applied concurrently after the collection.

As a result of the fixes (measured on sunfire x4200 (2x2 Opteron)):
 - copy time improved 30%
 - synchronous Rset update improved 30%
 - total collection pause time improved 20-25%%

Also fixed an issue with the pause time computation in the concurrent 
refinement thread.

Webrev: http://cr.openjdk.java.net/~iveresov/6720334/webrev.00/

Testing: specjbb2005, specjbb2000, jprt

igor



More information about the hotspot-gc-dev mailing list