On 2/4/19 15:05, David Holmes wrote:
On 5/02/2019 8:30 am, [email protected] wrote:
Hi Coleen,
Looks good in general.
Just a couple minor comments below.
I hope, you will update the copyright years before the push.
http://cr.openjdk.java.net/~coleenp/2019/8139551.01/webrev/test/hotspot/jtreg/runtime/RedefineTests/TestMultipleClasses.java.html
Nice test!
37 import java.lang.reflect.*;
38 import jdk.test.lib.compiler.InMemoryJavaCompiler;
39 import java.lang.instrument.*;
The imports above can be re-ordered.
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 "}");
Not clear, why sleep is needed here.
Presumably just to give it some code and consume some time.
Some print statement would be more simple and useful.
But it is really minor. :)
Thanks,
Serguei
Nit: But it should just be:
Thread.sleep(1)
not
Thread.currentThread().sleep(1);
sleep is a static method and as with all Thread static methods always
applies to the current thread.
David
Thanks,
Serguei
On 2/4/19 12:34, [email protected] wrote:
Added the serviceability-dev back.
Thanks,
Serguei
On 2/4/19 07:18, [email protected] wrote:
open webrev at
http://cr.openjdk.java.net/~coleenp/2019/8139551.01/webrev
bug link https://bugs.openjdk.java.net/browse/JDK-8139551
The links.
Thanks,
Coleen
On 2/4/19 10:08 AM, [email protected] wrote:
Summary: Walk code cache and deoptimize once per redefinition.*
*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.
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.
Tested with tier1-6, all the redefinition tests locally:
make test TEST=open/test/hotspot/jtreg/vmTestbase/nsk/jvmti
>&jvmti.out
make test TEST=open/test/hotspot/jtreg/vmTestbase/nsk/jdi >&jdi.out
make test TEST=open/test/hotspot/jtreg/runtime/RedefineTests
>&redefine.out
make test TEST=open/test/jdk/java/lang/instrument >&instrument.out
new test, and JMH test (see CR for results).
Thanks,
Coleen