<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi Coleen,<br>
      <br>
      <br>
      On 2/4/19 18:26, <a class="moz-txt-link-abbreviated" href="mailto:coleen.phillimore@oracle.com">coleen.phillimore@oracle.com</a> wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:33a1dbcb-d7c3-5d1a-1e65-8c9b85c9ca02@oracle.com"> <br>
      <br>
      <div class="moz-cite-prefix">On 2/4/19 5:30 PM, <a
          class="moz-txt-link-abbreviated"
          href="mailto:serguei.spitsyn@oracle.com"
          moz-do-not-send="true">serguei.spitsyn@oracle.com</a> wrote:<br>
      </div>
      <blockquote type="cite"
        cite="mid:32fd7304-5ebb-99b3-d3fa-b23e22439084@oracle.com">
        <div class="moz-cite-prefix">Hi Coleen,<br>
          <br>
          Looks good in general.<br>
          <br>
          Just a couple minor comments below.<br>
          <br>
          I hope, you will update the copyright years before the push.<br>
        </div>
      </blockquote>
      <br>
      Hi Serguei,  Thanks for reviewing this.<br>
      <br>
      Yes, I update the copyright years in my commit script.<br>
      <blockquote type="cite"
        cite="mid:32fd7304-5ebb-99b3-d3fa-b23e22439084@oracle.com">
        <div class="moz-cite-prefix"> <br>
          <br>
          <a class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/~coleenp/2019/8139551.01/webrev/test/hotspot/jtreg/runtime/RedefineTests/TestMultipleClasses.java.html"
            moz-do-not-send="true">http://cr.openjdk.java.net/~coleenp/2019/8139551.01/webrev/test/hotspot/jtreg/runtime/RedefineTests/TestMultipleClasses.java.html</a><br>
          <br>
          Â  Nice test!<br>
          <pre>  37 import java.lang.reflect.*;
  38 import jdk.test.lib.compiler.InMemoryJavaCompiler;
  39 import java.lang.instrument.*;</pre>
          Â  The imports above can be re-ordered.<br>
        </div>
      </blockquote>
      <br>
      Alphabetically?<br>
    </blockquote>
    <br>
    Yes. (No need in another webrev)<br>
    <br>
    <blockquote type="cite"
      cite="mid:33a1dbcb-d7c3-5d1a-1e65-8c9b85c9ca02@oracle.com">
      <blockquote type="cite"
        cite="mid:32fd7304-5ebb-99b3-d3fa-b23e22439084@oracle.com">
        <div class="moz-cite-prefix"> <br>
          <pre>  44         return new String("public class B" + count + " {" +
  45                 "   public static void compiledMethod() { " +
  46                 "       try{" +
  47                 "          Thread.currentThread().sleep(1); " +
  48                 "       } catch(InterruptedException ie) {" +
  49                 "       }" +
  50                 "   }" +
  51                 "}");
</pre>
          Â  Not clear, why sleep is needed here.<br>
          <br>
        </div>
      </blockquote>
      <br>
      Yes, the sleep was there so that the compiler didn't optimize away
      the function.  I didn't put a print because it would print too
      many times.<br>
    </blockquote>
    <br>
    Okay.<br>
    I hate, I placed this comment. :)<br>
    <br>
    Thanks,<br>
    Serguei<br>
    <br>
    <br>
    <blockquote type="cite"
      cite="mid:33a1dbcb-d7c3-5d1a-1e65-8c9b85c9ca02@oracle.com">
      Thanks,<br>
      Coleen<br>
      <blockquote type="cite"
        cite="mid:32fd7304-5ebb-99b3-d3fa-b23e22439084@oracle.com">
        <div class="moz-cite-prefix"> <br>
          Thanks,<br>
          Serguei<br>
          <br>
          <br>
          On 2/4/19 12:34, <a class="moz-txt-link-abbreviated"
            href="mailto:serguei.spitsyn@oracle.com"
            moz-do-not-send="true">serguei.spitsyn@oracle.com</a> wrote:<br>
        </div>
        <blockquote type="cite"
          cite="mid:05aa3357-0696-84e4-7e23-3b7a7a3f90e6@oracle.com">Added
          the serviceability-dev back. <br>
          <br>
          Thanks, <br>
          Serguei <br>
          <br>
          <br>
          On 2/4/19 07:18, <a class="moz-txt-link-abbreviated"
            href="mailto:coleen.phillimore@oracle.com"
            moz-do-not-send="true">coleen.phillimore@oracle.com</a>
          wrote: <br>
          <blockquote type="cite"> <br>
            open webrev at <a class="moz-txt-link-freetext"
              href="http://cr.openjdk.java.net/~coleenp/2019/8139551.01/webrev"
              moz-do-not-send="true">http://cr.openjdk.java.net/~coleenp/2019/8139551.01/webrev</a>
            <br>
            bug link <a class="moz-txt-link-freetext"
              href="https://bugs.openjdk.java.net/browse/JDK-8139551"
              moz-do-not-send="true">https://bugs.openjdk.java.net/browse/JDK-8139551</a>
            <br>
            <br>
            The links. <br>
            Thanks, <br>
            Coleen <br>
            <br>
            On 2/4/19 10:08 AM, <a class="moz-txt-link-abbreviated"
              href="mailto:coleen.phillimore@oracle.com"
              moz-do-not-send="true">coleen.phillimore@oracle.com</a>
            wrote: <br>
            <blockquote type="cite">Summary: Walk code cache and
              deoptimize once per redefinition.* <br>
              <br>
              *This change touches the AOT and code cache code.  I tried
              to describe it in the comments in the RFE.  Basically, for
              redefinition, we walk the code cache per class redefined
              in order to find evol_method dependencies, then deoptimize
              if we find them, and then walk the code cache again to
              mark the deoptimized nmethods as not_entrant. <br>
              <br>
              I replaced this with only marking any nmethods for the
              class's methods to deoptimize (following
              InstanceKlass::_methods), also marking aot methods
              dependent on the class, and then doing the code cache walk
              to follow the evol_method dependencies at the end of
              redefinition for all the classes.   The new code uses the
              Method::is_old() flag rather than comparing each method in
              the InstanceKlass.  Then deoptimization and marking
              not_entrant is done once at the end of the redefinition as
              well. <br>
              <br>
              Tested with tier1-6, all the redefinition tests locally: <br>
              <br>
              make test
              TEST=open/test/hotspot/jtreg/vmTestbase/nsk/jvmti
              >&jvmti.out <br>
              make test TEST=open/test/hotspot/jtreg/vmTestbase/nsk/jdi
              >&jdi.out <br>
              make test
              TEST=open/test/hotspot/jtreg/runtime/RedefineTests
              >&redefine.out <br>
              make test TEST=open/test/jdk/java/lang/instrument
              >&instrument.out <br>
              <br>
              new test, and JMH test (see CR for results). <br>
              <br>
              Thanks, <br>
              Coleen <br>
              <br>
              <br>
            </blockquote>
            <br>
          </blockquote>
          <br>
        </blockquote>
        <br>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>