src/share/vm/code/nmethod.cpp

Print this page
rev 4802 : imported patch optimize-nmethod-scanning

*** 685,694 **** --- 685,695 ---- _pc_desc_cache.reset_to(NULL); code_buffer->copy_values_to(this); if (ScavengeRootsInCode && detect_scavenge_root_oops()) { CodeCache::add_scavenge_root_nmethod(this); + Universe::heap()->register_nmethod(this); } debug_only(verify_scavenge_root_oops()); CodeCache::commit(this); }
*** 879,888 **** --- 880,890 ---- code_buffer->copy_values_to(this); debug_info->copy_to(this); dependencies->copy_to(this); if (ScavengeRootsInCode && detect_scavenge_root_oops()) { CodeCache::add_scavenge_root_nmethod(this); + Universe::heap()->register_nmethod(this); } debug_only(verify_scavenge_root_oops()); CodeCache::commit(this);
*** 1335,1344 **** --- 1337,1352 ---- // It's a true state change, so mark the method as decompiled. // Do it only for transition from alive. inc_decompile_count(); } + // If the state is becoming a zombie, unregister the nmethod with heap + // This nmethod may have already been unloaded during a full GC. + if ((state == zombie) && !is_unloaded()) { + Universe::heap()->unregister_nmethod(this); + } + // Change state _state = state; // Log the transition once log_state_change();