RFR: 8215491: ICStubInterface::finalize finds zombie nmethod with ZGC concurrent class unloading

Erik Österlund erik.osterlund at oracle.com
Mon Dec 17 16:56:55 UTC 2018


Hi,

Today, when converting a not_entrant nmethod to zombie, the sweeper 
first clears the IC stubs of that nmethod, and then make_zombie(). With 
concurrent class unloading, this ordering is a bit unfortunate. Between 
clearing the IC stubs and making it zombie, the concurrent GC threads 
may hit a timing window where they will create IC stubs for concurrently 
cleaning the ICs of this still is_alive() nmethod. The result is that 
during safepoint cleanup, when we finalize the IC stubs, we find one 
associated with a zombie.

The unregistering of the nmethod from the GC will block during 
concurrent nmethod unloading, so clearing the IC stubs after the nmethod 
has become zombie is a lot more sane as there can not be any such races 
then.

Bug:
https://bugs.openjdk.java.net/browse/JDK-8215491

Webrev:
http://cr.openjdk.java.net/~eosterlund/8215491/webrev.00/index.html

Thanks,
/Erik


More information about the hotspot-dev mailing list