RFR (M) 8139551: Scalability problem with redefinition - multiple code cache walks

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Mon Feb 4 15:08:35 UTC 2019


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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20190204/1cfb1302/attachment-0001.html>


More information about the serviceability-dev mailing list