<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">RFR 2nd version.<br>
<br>
New version is focused on making <span class="new"><span
class="new"><span class="new"><span class="new"></span></span><span
class="new"><span class="new">ConcurrentMarkSweepThread a
proper subclass of </span></span></span></span><span
class="new"><span class="new"><span class="new"><span
class="new"></span></span><span class="new"></span><span
class="new"><span class="new">ConcurrentGCThread, especially
related to sharing the same initialization and termination
protocols. See <a
href="http://cr.openjdk.java.net/%7Edrwhite/8140257/webrev.01.v.02/">incremental
webrev</a> for details.</span></span></span></span><br>
<ul>
<li><span class="new"><span class="new"><span class="new"><span
class="new"><span class="new"><span class="new"><span
class="new"><span class="new">Move CMS-specific
code to run_service()/stop_service(), inherit
run()/stop() methods.</span></span></span></span></span></span></span></span></li>
<li><span class="new"><span class="new"><span class="new"><span
class="new"><span class="new"><span class="new"><span
class="new"><span class="new"></span></span></span></span>Removed
</span></span></span></span><span class="new"><span
class="new"><span class="new"><span class="new"></span></span><span
class="new"><span class="new">ConcurrentMarkSweepThread::_should_terminate,
use inherited </span></span></span></span><span
class="new"><span class="new"><span class="new"><span
class="new">_should_terminate instead.</span></span></span></span></li>
<li><span class="new"><span class="new"><span class="new"><span
class="new">Use the inherited _has_terminated flag
instead of _cmst to denote termination. Users call
cmst() instead of reading _cmst.</span></span></span></span></li>
<li><span class="new"><span class="new"><span class="new"><span
class="new">Change ConcurrentMarkSweepThread::start()
and stop() to match G1's handling - assume stop() only
called after start(), so ConcurrentGCThread objects
have been created.</span></span></span></span></li>
<ul>
<li><span class="new"><span class="new"><span class="new"><span
class="new">CMS and G1 start() methods called in
same place: Universe::Initialize_heap(), and the
stop() methods are called in same place:
before_exit(), so they have the same lifetimes for
their ConcurrentGCThreads.</span></span></span></span></li>
</ul>
</ul>
<span class="new"><span class="new"><span class="new"><span
class="new"><br>
</span></span></span></span><b>Bug</b>: <a
moz-do-not-send="true" class="moz-txt-link-freetext"
href="https://bugs.openjdk.java.net/browse/JDK-8140257"><a class="moz-txt-link-freetext" href="https://bugs.openjdk.java.net/browse/JDK-8140257">https://bugs.openjdk.java.net/browse/JDK-8140257</a></a><br>
<b>Webrev</b>: <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Edrwhite/8140257/webrev.02/">http://cr.openjdk.java.net/~drwhite/8140257/webrev.02/</a><br>
<b>Incremental 1 vs 2</b>:
<a class="moz-txt-link-freetext" href="http://cr.openjdk.java.net/~drwhite/8140257/webrev.01.v.02/">http://cr.openjdk.java.net/~drwhite/8140257/webrev.01.v.02/</a><br>
<br>
<b>Tests</b>:<br>
- jprt<br>
- Aurora Perf (including
<meta http-equiv="content-type" content="text/html; charset=utf-8">
Startup3-Server-CMS,
<meta http-equiv="content-type" content="text/html; charset=utf-8">
Footprint3-Server-CMS)<br>
- Aurora Test "hs-nightly-gc-cms".<br>
<br>
Thanks for looking!<br>
- Derek<br>
<br>
On 2/26/16 11:51 PM, Derek White wrote:<br>
</div>
<blockquote cite="mid:56D12B40.1030403@oracle.com" type="cite">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<div class="moz-cite-prefix">I'm working on a new webrev, so
please hold off on reviewing.<br>
<br>
Some offline comments from Kim suggest trying another approach.
Any other approach :-) He rightly pointed out the poor match
between the new code and <span class="new"><span class="new">ConcurrentMarkSweepThread
is pretty ugly. <br>
</span></span><br>
<span class="new"><span class="new"><span class="new"><span
class="new">Two other options I'm looking at are either
having </span></span><span class="new"><span
class="new">ConcurrentMarkSweepThread not subclass from
</span></span><span class="new"></span><span class="new"><span
class="new">ConcurrentGCThread, or (more likely)
refactor </span></span><span class="new"><span
class="new">ConcurrentMarkSweepThread to use the common
termination protocol instead of doing it's own thing. </span></span>The
approach of adding an intermediate class that handles the
common code being factored out was rejected in review
comments for "8138920". </span></span><span class="new"><span
class="new"><br>
<br>
- Derek</span></span><br>
<br>
On 2/26/16 11:56 AM, Derek White wrote:<br>
</div>
<blockquote cite="mid:56D083A7.4090000@oracle.com" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=utf-8">
<meta http-equiv="content-type" content="text/html;
charset=utf-8">
<span class="new"><b>Background</b>:<br>
ConcurrentGCThread provides incomplete support for an
initialization and termination protocol for GC threads, so
missing parts are duplicated in almost all subclasses.<br>
<br>
<b>Fix</b>:<br>
Move duplicated </span><span class="new">run(), and stop()
methods up from subclasses </span><span class="new">
<meta http-equiv="content-type" content="text/html;
charset=utf-8">
ConcurrentG1RefineThread, </span><span class="new">
<meta http-equiv="content-type" content="text/html;
charset=utf-8">
ConcurrentMarkThread, G1StringDedupThread, and
G1YoungRemSetSamplingThread to </span><span class="new"><span
class="new">ConcurrentGCThread, as well as declare virtual
methods </span></span><span class="new"><span class="new">run_service()
and stop_service.<br>
<br>
Note that ConcurrentMarkSweepThread is the odd-ball
subclass. It implements it's own termination protocol, it
provides it's own run() and stop() methods, and does not use
</span></span><span class="new"><span class="new">run_service()
and stop_service().</span></span><br>
<meta http-equiv="content-type" content="text/html;
charset=utf-8">
<span class="new"></span><br>
<b>Bug</b>: <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="https://bugs.openjdk.java.net/browse/JDK-8140257">https://bugs.openjdk.java.net/browse/JDK-8140257</a><br>
<b>Webrev</b>: <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Edrwhite/8140257/webrev.01/">http://cr.openjdk.java.net/~drwhite/8140257/webrev.01/</a><br>
<br>
<b>Tests</b>: jprt, Aurora "nightly" run (I think this is OK)<br>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://aurora.ru.oracle.com/faces/Batch.xhtml?batchName=1325690.VMSQE.adhoc.JPRT">http://aurora.ru.oracle.com/faces/Batch.xhtml?batchName=1325690.VMSQE.adhoc.JPRT</a>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>