<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Hi Vitaly,<br>
<br>
Thanks for looking at the code. The stamp is a pointer because it is
actually an array of stamps - a separate stamp for each worker. Setting
the stamp (for a given worker) at the same time as we cache the
starting region means that we can determine if the starting region has
been set (during the current pause) without having to clear the cache
at the end of the pause. If the stamp for given worker has not been set
during the current pause then we have to assume that the starting
region entry for that worker is stale and re-calculate the starting
region (setting the stamp and updating the cache).<br>
<br>
Does this answer your question?<br>
<br>
Let me know if you any others.<br>
<br>
Thanks,<br>
<br>
JohnC<br>
<br>
On 12/12/11 06:27, Vitaly Davidovich wrote:
<blockquote
cite="mid:CAHjP37EP=8Kii8DZu_xz8f_pS_Jn6-BMH2aLirpubHxN5OBfBg@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type"
content="text/html; charset=ISO-8859-1">
<p>Hi John,</p>
<p>Just curious - why did you make the timestamp a uint* instead of
uint?</p>
<p>Thanks,</p>
<p>Vitaly</p>
<div>On Dec 9, 2011 2:20 PM, "John Cuthbertson" <<a
moz-do-not-send="true" href="mailto:john.cuthbertson@oracle.com">john.cuthbertson@oracle.com</a>>
wrote:<br>
<blockquote>
<div> Hi Everyone,<br>
<br>
Can I have a couple of volunteers to review the changes for this CR?
The webrev can be found at: <a moz-do-not-send="true"
href="http://cr.openjdk.java.net/%7Ejohnc/7119908/webrev.0/">http://cr.openjdk.java.net/~johnc/7119908/webrev.0/</a><br>
<br>
Summary:<br>
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.<br>
<br>
Testing:<br>
GC Test suite with a small marking threshold (10%) with and without
verification; the configuration of SPECjbb used to test 7117423;
Kitchensink.<br>
<br>
Thanks,<br>
<br>
JohnC<br>
<br>
</div>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>