--- old/src/share/vm/c1/c1_Runtime1.cpp 2017-04-10 08:16:16.672937053 +0200 +++ new/src/share/vm/c1/c1_Runtime1.cpp 2017-04-10 08:16:16.496929492 +0200 @@ -1221,12 +1221,13 @@ // If we are patching in a non-perm oop, make sure the nmethod // is on the right list. - if (ScavengeRootsInCode && ((mirror.not_null() && mirror()->is_scavengable()) || - (appendix.not_null() && appendix->is_scavengable()))) { + if (ScavengeRootsInCode) { MutexLockerEx ml_code (CodeCache_lock, Mutex::_no_safepoint_check_flag); nmethod* nm = CodeCache::find_nmethod(caller_frame.pc()); guarantee(nm != NULL, "only nmethods can contain non-perm oops"); - if (!nm->on_scavenge_root_list()) { + if (!nm->on_scavenge_root_list() && + ((mirror.not_null() && mirror()->is_scavengable()) || + (appendix.not_null() && appendix->is_scavengable()))) { CodeCache::add_scavenge_root_nmethod(nm); }