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(®_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(®_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(®_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(®_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 { |