RFR(S): 7119908: G1: Cache CSet start region for each worker for subsequent reuse
bengt.rutisson at oracle.com
Tue Dec 13 12:38:45 UTC 2011
First a high level question: I think your changes are correct, but this
got a bit more complex than I thought it would be when I suggested it in
the review of 7112743. Is the extra complexity worth the benefits of
only having to do the iterations once instead of twice? I don't have a
clear answer to this myself, I just wanted to bring the question up.
Clearly it is more efficient, but it is 3x as much code to do the same
One detail for my understanding: why do we need separate time stamps for
each worker? Do all worker not participate in RSet scanning before they
go on to do complete_marking_in_collection_set() ?
On 2011-12-09 20:18, John Cuthbertson wrote:
> Hi Everyone,
> Can I have a couple of volunteers to review the changes for this CR?
> The webrev can be found at:
> As part of the code review comments for 7112743 (G1: Reduce overhead
> of marking closure during evacuation pauses) it was suggested that
> instead of recalculating the starting heap region for each worker
> thread, we reuse the values calculated during RSet scanning. These
> changes address that review comment. In these changes I maintain a
> cache that is used and updated by
> G1CollectedHeap::start_cset_region_for_worker(). The first time this
> routine is called by a worker thread during an evacuation pause
> (currently during RSet scanning) the cached value for the worker gets
> set; when the routine is called subsequently the region that was
> cached for the worker is returned. I employ a simple stamp mechanism
> based upon the number of GCs that ensures the validity of the regions
> in the cache and makes clearing the cache unnecessary.
> GC Test suite with a small marking threshold (10%) with and without
> verification; the configuration of SPECjbb used to test 7117423;
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the hotspot-gc-dev