RFR (M) 8203837: Split nmethod unloading from nmethod cache cleaning
coleen.phillimore at oracle.com
coleen.phillimore at oracle.com
Wed May 30 12:23:51 UTC 2018
Summary: Refactor cleaning inline caches to after GC do_unloading.
See CR for more information. This patch refactors
CompiledMethod::do_unloading() to unload nmethods in case of !is_alive
oop. If the nmethod is not unloaded, cleans the inline caches, and
exception cache, for unloaded classes and unloaded nmethods. The
CodeCache walk in gc_epilogue is moved earlier to combine with cleanup
for class unloading.
It doesn't add CodeCache walks to any of the GCs, and keeps the G1
parallel nmethod unloading intact. This patch also uses common code for
CompiledMethod::clean_inline_caches which was duplicated by the G1
functions.
The patch also fixed a case in AOT where clear_inline_caches should be
called instead of clean_inline_caches. I think neither is necessary
for the nmethods that are deoptimized because of redefinition, but
clear_inline_caches clears up redefined Methods* not for unloaded
nmethods. Once the method is cleaned by the sweeper,
clean_inline_caches will be called on it. clear vs. clean ...
The patch also converts TraceScavenge to -Xlog:gc+nmethod=trace. I can
revert this part and do it separately; I had just converted it while
looking at the output.
open webrev at http://cr.openjdk.java.net/~coleenp/8203837.01/webrev
bug link https://bugs.openjdk.java.net/browse/JDK-8203837
Tested with mach5 hs-tier1-5, the gc-test-suite (including specjbb2015,
dacapo, gcbasher), runThese with all GCs with and without class unloading.
This is an enhancement that we can use for making nmethod cleaning
concurrent in ZGC.
Thanks,
Coleen
More information about the hotspot-dev
mailing list