void process_buffer () { assert((_hr_curr - _hr_buffer) == (_buffer_curr - _buffer), "the two lengths should be the same"); double start = os::elapsedTime(); HeapRegion** hr_curr = _hr_buffer; HeapRegion* hr_prev = NULL; for (StarTask* curr = _buffer; curr < _buffer_curr; ++curr) { HeapRegion* region = *hr_curr; if (region != hr_prev) { _oc->set_region(region); hr_prev = region; } if (curr->is_narrow()) { assert(UseCompressedOops, "Error"); _oc->do_oop((narrowOop*)(*curr)); } else { _oc->do_oop((oop*)(*curr)); } ++hr_curr; } _buffer_curr = _buffer; _hr_curr = _hr_buffer; _closure_app_seconds += (os::elapsedTime() - start); }
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); }
bool G1ParScanThreadState::verify_task(StarTask ref) const { if (ref.is_narrow()) { return verify_ref((narrowOop*) ref); } else { return verify_ref((oop*) ref); } }
oop unmask_chunked_array_oop(StarTask p) { assert(is_oop_masked(p), "invariant"); assert(!p.is_narrow(), "chunked array oops cannot be narrow"); oop *chunk = (oop*)p; // cast p to oop (uses conversion operator) oop ret = oop((oop*)((uintptr_t)chunk & ~PS_CHUNKED_ARRAY_OOP_MASK)); assert(!is_oop_masked((oop*) ret), "invariant"); return ret; }
inline void PSPromotionManager::process_popped_location_depth(StarTask p) { if (is_oop_masked(p)) { assert(PSChunkLargeArrays, "invariant"); oop const old = unmask_chunked_array_oop(p); process_array_chunk(old); } else { if (p.is_narrow()) { PSScavenge::copy_and_push_safe_barrier(this, (narrowOop*)p); } else { PSScavenge::copy_and_push_safe_barrier(this, (oop*)p); } } }