< prev index next >

src/share/vm/gc/shenandoah/shenandoahHeap.inline.hpp

Print this page




 334 #else
 335     copy_object(p, filler, required - BrooksPointer::word_size());
 336 #endif
 337 
 338   oop copy_val = oop(copy);
 339   oop result = BrooksPointer::try_update_forwardee(p, copy_val);
 340 
 341   oop return_val;
 342   if (oopDesc::unsafe_equals(result, p)) {
 343     evacuated = true;
 344     return_val = copy_val;
 345 
 346     log_develop_trace(gc, compaction)("Copy of "PTR_FORMAT" to "PTR_FORMAT" succeeded \n",
 347                                       p2i((HeapWord*) p), p2i(copy));
 348 
 349 #ifdef ASSERT
 350     assert(return_val->is_oop(), "expect oop");
 351     assert(p->klass() == return_val->klass(), "Should have the same class p: "PTR_FORMAT", copy: "PTR_FORMAT,
 352                                               p2i((HeapWord*) p), p2i((HeapWord*) copy));
 353 

 354     UpdateMatrixClosure cl;
 355     copy_val->oop_iterate(&cl);

 356 #endif
 357   }  else {
 358     if (alloc_from_gclab) {
 359       thread->gclab().rollback(required);
 360     }
 361     log_develop_trace(gc, compaction)("Copy of "PTR_FORMAT" to "PTR_FORMAT" failed, use other: "PTR_FORMAT,
 362                                       p2i((HeapWord*) p), p2i(copy), p2i((HeapWord*) result));
 363     return_val = result;
 364   }
 365 
 366   return return_val;
 367 }
 368 
 369 inline bool ShenandoahHeap::requires_marking(const void* entry) const {
 370   return ! is_marked_next(oop(entry));
 371 }
 372 
 373 bool ShenandoahHeap::region_in_collection_set(size_t region_index) const {
 374   return _in_cset_fast_test_base[region_index];
 375 }




 334 #else
 335     copy_object(p, filler, required - BrooksPointer::word_size());
 336 #endif
 337 
 338   oop copy_val = oop(copy);
 339   oop result = BrooksPointer::try_update_forwardee(p, copy_val);
 340 
 341   oop return_val;
 342   if (oopDesc::unsafe_equals(result, p)) {
 343     evacuated = true;
 344     return_val = copy_val;
 345 
 346     log_develop_trace(gc, compaction)("Copy of "PTR_FORMAT" to "PTR_FORMAT" succeeded \n",
 347                                       p2i((HeapWord*) p), p2i(copy));
 348 
 349 #ifdef ASSERT
 350     assert(return_val->is_oop(), "expect oop");
 351     assert(p->klass() == return_val->klass(), "Should have the same class p: "PTR_FORMAT", copy: "PTR_FORMAT,
 352                                               p2i((HeapWord*) p), p2i((HeapWord*) copy));
 353 
 354     if (UseShenandoahMatrix) {
 355       UpdateMatrixClosure cl;
 356       copy_val->oop_iterate(&cl);
 357     }
 358 #endif
 359   }  else {
 360     if (alloc_from_gclab) {
 361       thread->gclab().rollback(required);
 362     }
 363     log_develop_trace(gc, compaction)("Copy of "PTR_FORMAT" to "PTR_FORMAT" failed, use other: "PTR_FORMAT,
 364                                       p2i((HeapWord*) p), p2i(copy), p2i((HeapWord*) result));
 365     return_val = result;
 366   }
 367 
 368   return return_val;
 369 }
 370 
 371 inline bool ShenandoahHeap::requires_marking(const void* entry) const {
 372   return ! is_marked_next(oop(entry));
 373 }
 374 
 375 bool ShenandoahHeap::region_in_collection_set(size_t region_index) const {
 376   return _in_cset_fast_test_base[region_index];
 377 }


< prev index next >