예제 #1
0
 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);
    }
  }
}
예제 #3
0
 oop* mask_chunked_array_oop(oop obj) {
   assert(!is_oop_masked((oop*) obj), "invariant");
   oop* ret = (oop*) ((uintptr_t)obj | PS_CHUNKED_ARRAY_OOP_MASK);
   assert(is_oop_masked(ret), "invariant");
   return ret;
 }
void PSPromotionManager::record_steal(StarTask& p) {
    if (is_oop_masked(p)) {
        ++_masked_steals;
    }
}