< prev index next >

src/share/vm/runtime/sweeper.cpp

Print this page

        

*** 609,619 **** result = MarkedForReclamation; } } else if (nm->is_not_entrant()) { // If there are no current activations of this method on the // stack we can safely convert it to a zombie method ! if (nm->can_not_entrant_be_converted()) { // Clear ICStubs to prevent back patching stubs of zombie or unloaded // nmethods during the next safepoint (see ICStub::finalize). { MutexLocker cl(CompiledIC_lock); nm->clear_ic_stubs(); --- 609,619 ---- result = MarkedForReclamation; } } else if (nm->is_not_entrant()) { // If there are no current activations of this method on the // stack we can safely convert it to a zombie method ! if (nm->can_convert_to_zombie()) { // Clear ICStubs to prevent back patching stubs of zombie or unloaded // nmethods during the next safepoint (see ICStub::finalize). { MutexLocker cl(CompiledIC_lock); nm->clear_ic_stubs();
*** 643,652 **** --- 643,658 ---- // No inline caches will ever point to osr methods, so we can just remove it release_nmethod(nm); assert(result == None, "sanity"); result = Flushed; } else { + { + // Clean ICs of unloaded nmethods as well because they may reference other + // unloaded nmethods that may be flushed earlier in the sweeper cycle. + MutexLocker cl(CompiledIC_lock); + nm->cleanup_inline_caches(); + } // Code cache state change is tracked in make_zombie() nm->make_zombie(); SWEEP(nm); assert(result == None, "sanity"); result = MadeZombie;
< prev index next >