void process_buffer () { double start = os::elapsedTime(); for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) { if (curr->is_narrow()) { assert(UseCompressedOops, "Error"); _oc->do_oop((narrowOop*)(*curr)); } else { _oc->do_oop((oop*)(*curr)); } } _buffer_curr = _buffer; _closure_app_seconds += (os::elapsedTime() - start); }
void process_buffer () { double start = os::elapsedTime(); for (oop **curr = _buffer; curr < _buffer_curr; ++curr) { _oc->do_oop(*curr); } _buffer_curr = _buffer; _closure_app_seconds += (os::elapsedTime() - start); }
void do_oop_work(T* p) { _work->do_oop(p); T oop_or_narrowoop = oopDesc::load_heap_oop(p); if (!oopDesc::is_null(oop_or_narrowoop)) { oop o = oopDesc::decode_heap_oop_not_null(oop_or_narrowoop); HeapRegion* hr = _g1h->heap_region_containing_raw(o); assert(!_g1h->obj_in_cs(o) || hr->rem_set()->strong_code_roots_list_contains(_nm), "if o still in CS then evacuation failed and nm must already be in the remset"); hr->add_strong_code_root(_nm); } }
// Applies the keep_alive closure, or does nothing if no such // closure was provided. void keep_alive(oop* p) { if (_keep_alive != NULL) { _keep_alive->do_oop(p); } }
virtual void do_oop(oop* p) { oop o = (*p); if (!o->is_shared_readwrite()) { _clo->do_oop(p); } }
template <class T> void do_oop_nv(T* p) { _c1->do_oop(p); _c2->do_oop(p); }
template <class T> void do_oop_nv(T* p) { if (!_t->value()) _oc->do_oop(p); }
void do_oop(objectRef* p) { if (mr.contains(p)) { cl->do_oop(p); } }
void do_oop(narrowOop* p) { assert(false, "Only the _nv versions should be used"); _wrapped_closure->do_oop(p);}
// Warning: this calls the virtual version do_oop in the the wrapped closure. void do_oop_nv(oop* p) { _wrapped_closure->do_oop(p); }