< prev index next >

src/hotspot/share/gc/g1/g1CollectedHeap.cpp

Print this page




4781     if (!CompressedOops::is_null(heap_oop)) {
4782       oop obj = CompressedOops::decode_not_null(heap_oop);
4783       HeapRegion* hr = _g1h->heap_region_containing(obj);
4784       assert(!hr->is_continues_humongous(),
4785              "trying to remove code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT
4786              " starting at " HR_FORMAT,
4787              p2i(_nm), HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()));
4788 
4789       hr->remove_strong_code_root(_nm);
4790     }
4791   }
4792 
4793 public:
4794   UnregisterNMethodOopClosure(G1CollectedHeap* g1h, nmethod* nm) :
4795     _g1h(g1h), _nm(nm) {}
4796 
4797   void do_oop(oop* p)       { do_oop_work(p); }
4798   void do_oop(narrowOop* p) { do_oop_work(p); }
4799 };
4800 
4801 // Returns true if the reference points to an object that
4802 // can move in an incremental collection.
4803 bool G1CollectedHeap::is_scavengable(oop obj) {
4804   HeapRegion* hr = heap_region_containing(obj);
4805   return !hr->is_pinned();
4806 }
4807 
4808 void G1CollectedHeap::register_nmethod(nmethod* nm) {
4809   guarantee(nm != NULL, "sanity");
4810   RegisterNMethodOopClosure reg_cl(this, nm);
4811   nm->oops_do(&reg_cl);
4812 }
4813 
4814 void G1CollectedHeap::unregister_nmethod(nmethod* nm) {
4815   guarantee(nm != NULL, "sanity");
4816   UnregisterNMethodOopClosure reg_cl(this, nm);
4817   nm->oops_do(&reg_cl, true);
4818 }
4819 
4820 void G1CollectedHeap::purge_code_root_memory() {
4821   double purge_start = os::elapsedTime();
4822   G1CodeRootSet::purge();
4823   double purge_time_ms = (os::elapsedTime() - purge_start) * 1000.0;
4824   phase_times()->record_strong_code_root_purge_time(purge_time_ms);
4825 }
4826 
4827 class RebuildStrongCodeRootClosure: public CodeBlobClosure {




4781     if (!CompressedOops::is_null(heap_oop)) {
4782       oop obj = CompressedOops::decode_not_null(heap_oop);
4783       HeapRegion* hr = _g1h->heap_region_containing(obj);
4784       assert(!hr->is_continues_humongous(),
4785              "trying to remove code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT
4786              " starting at " HR_FORMAT,
4787              p2i(_nm), HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()));
4788 
4789       hr->remove_strong_code_root(_nm);
4790     }
4791   }
4792 
4793 public:
4794   UnregisterNMethodOopClosure(G1CollectedHeap* g1h, nmethod* nm) :
4795     _g1h(g1h), _nm(nm) {}
4796 
4797   void do_oop(oop* p)       { do_oop_work(p); }
4798   void do_oop(narrowOop* p) { do_oop_work(p); }
4799 };
4800 







4801 void G1CollectedHeap::register_nmethod(nmethod* nm) {
4802   guarantee(nm != NULL, "sanity");
4803   RegisterNMethodOopClosure reg_cl(this, nm);
4804   nm->oops_do(&reg_cl);
4805 }
4806 
4807 void G1CollectedHeap::unregister_nmethod(nmethod* nm) {
4808   guarantee(nm != NULL, "sanity");
4809   UnregisterNMethodOopClosure reg_cl(this, nm);
4810   nm->oops_do(&reg_cl, true);
4811 }
4812 
4813 void G1CollectedHeap::purge_code_root_memory() {
4814   double purge_start = os::elapsedTime();
4815   G1CodeRootSet::purge();
4816   double purge_time_ms = (os::elapsedTime() - purge_start) * 1000.0;
4817   phase_times()->record_strong_code_root_purge_time(purge_time_ms);
4818 }
4819 
4820 class RebuildStrongCodeRootClosure: public CodeBlobClosure {


< prev index next >