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