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 } |