<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>