Request for review(M) - 6720334, 6720309
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
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
Testing: specjbb2005, specjbb2000, jprt
More information about the hotspot-gc-dev