--- old/src/share/vm/code/codeCache.cpp 2017-07-25 13:51:22.981657889 +0200 +++ new/src/share/vm/code/codeCache.cpp 2017-07-25 13:51:22.825657894 +0200 @@ -683,8 +683,9 @@ if (cb->is_alive()) { f->do_code_blob(cb); #ifdef ASSERT - if (cb->is_nmethod()) - ((nmethod*)cb)->verify_scavenge_root_oops(); + if (cb->is_nmethod()) { + Universe::heap()->verify_nmethod_roots((nmethod*)cb); + } #endif //ASSERT } } @@ -695,10 +696,6 @@ void CodeCache::scavenge_root_nmethods_do(CodeBlobToOopClosure* f) { assert_locked_or_safepoint(CodeCache_lock); - if (UseG1GC) { - return; - } - const bool fix_relocations = f->fix_relocations(); debug_only(mark_scavenge_root_nmethods()); @@ -735,12 +732,15 @@ debug_only(verify_perm_nmethods(NULL)); } -void CodeCache::add_scavenge_root_nmethod(nmethod* nm) { +void CodeCache::register_scavenge_root_nmethod(nmethod* nm) { assert_locked_or_safepoint(CodeCache_lock); - - if (UseG1GC) { - return; + if (!nm->on_scavenge_root_list() && nm->detect_scavenge_root_oops()) { + add_scavenge_root_nmethod(nm); } +} + +void CodeCache::add_scavenge_root_nmethod(nmethod* nm) { + assert_locked_or_safepoint(CodeCache_lock); nm->set_on_scavenge_root_list(); nm->set_scavenge_root_link(_scavenge_root_nmethods); @@ -754,8 +754,6 @@ assert((prev == NULL && scavenge_root_nmethods() == nm) || (prev != NULL && prev->scavenge_root_link() == nm), "precondition"); - assert(!UseG1GC, "G1 does not use the scavenge_root_nmethods list"); - print_trace("unlink_scavenge_root", nm); if (prev == NULL) { set_scavenge_root_nmethods(nm->scavenge_root_link()); @@ -769,10 +767,6 @@ void CodeCache::drop_scavenge_root_nmethod(nmethod* nm) { assert_locked_or_safepoint(CodeCache_lock); - if (UseG1GC) { - return; - } - print_trace("drop_scavenge_root", nm); nmethod* prev = NULL; for (nmethod* cur = scavenge_root_nmethods(); cur != NULL; cur = cur->scavenge_root_link()) { @@ -788,10 +782,6 @@ void CodeCache::prune_scavenge_root_nmethods() { assert_locked_or_safepoint(CodeCache_lock); - if (UseG1GC) { - return; - } - debug_only(mark_scavenge_root_nmethods()); nmethod* last = NULL; @@ -820,10 +810,6 @@ #ifndef PRODUCT void CodeCache::asserted_non_scavengable_nmethods_do(CodeBlobClosure* f) { - if (UseG1GC) { - return; - } - // While we are here, verify the integrity of the list. mark_scavenge_root_nmethods(); for (nmethod* cur = scavenge_root_nmethods(); cur != NULL; cur = cur->scavenge_root_link()) { @@ -854,7 +840,7 @@ assert(nm->scavenge_root_not_marked(), "must be already processed"); if (nm->on_scavenge_root_list()) call_f = false; // don't show this one to the client - nm->verify_scavenge_root_oops(); + Universe::heap()->verify_nmethod_roots(nm); if (call_f) f_or_null->do_code_blob(nm); } } @@ -1640,4 +1626,3 @@ blob_count(), nmethod_count(), adapter_count(), unallocated_capacity()); } -