< prev index next >

src/share/vm/code/codeCache.cpp

Print this page
rev 13280 : imported patch CollectedHeap_register_nmethod
rev 13281 : [mq]: CollectedHeap_register_nmethod_v2


 715       f->do_code_blob(cur);
 716     }
 717     nmethod* const next = cur->scavenge_root_link();
 718     // The scavengable nmethod list must contain all methods with scavengable
 719     // oops. It is safe to include more nmethod on the list, but we do not
 720     // expect any live non-scavengable nmethods on the list.
 721     if (fix_relocations) {
 722       if (!is_live || !cur->detect_scavenge_root_oops()) {
 723         unlink_scavenge_root_nmethod(cur, prev);
 724       } else {
 725         prev = cur;
 726       }
 727     }
 728     cur = next;
 729   }
 730 
 731   // Check for stray marks.
 732   debug_only(verify_perm_nmethods(NULL));
 733 }
 734 







 735 void CodeCache::add_scavenge_root_nmethod(nmethod* nm) {
 736   assert_locked_or_safepoint(CodeCache_lock);
 737 
 738   nm->set_on_scavenge_root_list();
 739   nm->set_scavenge_root_link(_scavenge_root_nmethods);
 740   set_scavenge_root_nmethods(nm);
 741   print_trace("add_scavenge_root", nm);
 742 }
 743 
 744 void CodeCache::unlink_scavenge_root_nmethod(nmethod* nm, nmethod* prev) {
 745   assert_locked_or_safepoint(CodeCache_lock);
 746 
 747   assert((prev == NULL && scavenge_root_nmethods() == nm) ||
 748          (prev != NULL && prev->scavenge_root_link() == nm), "precondition");
 749 
 750   print_trace("unlink_scavenge_root", nm);
 751   if (prev == NULL) {
 752     set_scavenge_root_nmethods(nm->scavenge_root_link());
 753   } else {
 754     prev->set_scavenge_root_link(nm->scavenge_root_link());




 715       f->do_code_blob(cur);
 716     }
 717     nmethod* const next = cur->scavenge_root_link();
 718     // The scavengable nmethod list must contain all methods with scavengable
 719     // oops. It is safe to include more nmethod on the list, but we do not
 720     // expect any live non-scavengable nmethods on the list.
 721     if (fix_relocations) {
 722       if (!is_live || !cur->detect_scavenge_root_oops()) {
 723         unlink_scavenge_root_nmethod(cur, prev);
 724       } else {
 725         prev = cur;
 726       }
 727     }
 728     cur = next;
 729   }
 730 
 731   // Check for stray marks.
 732   debug_only(verify_perm_nmethods(NULL));
 733 }
 734 
 735 void CodeCache::register_scavenge_root_nmethod(nmethod* nm) {
 736   assert_locked_or_safepoint(CodeCache_lock);
 737   if (!nm->on_scavenge_root_list() && nm->detect_scavenge_root_oops()) {
 738     add_scavenge_root_nmethod(nm);
 739   }
 740 }
 741 
 742 void CodeCache::add_scavenge_root_nmethod(nmethod* nm) {
 743   assert_locked_or_safepoint(CodeCache_lock);
 744 
 745   nm->set_on_scavenge_root_list();
 746   nm->set_scavenge_root_link(_scavenge_root_nmethods);
 747   set_scavenge_root_nmethods(nm);
 748   print_trace("add_scavenge_root", nm);
 749 }
 750 
 751 void CodeCache::unlink_scavenge_root_nmethod(nmethod* nm, nmethod* prev) {
 752   assert_locked_or_safepoint(CodeCache_lock);
 753 
 754   assert((prev == NULL && scavenge_root_nmethods() == nm) ||
 755          (prev != NULL && prev->scavenge_root_link() == nm), "precondition");
 756 
 757   print_trace("unlink_scavenge_root", nm);
 758   if (prev == NULL) {
 759     set_scavenge_root_nmethods(nm->scavenge_root_link());
 760   } else {
 761     prev->set_scavenge_root_link(nm->scavenge_root_link());


< prev index next >