< prev index next >

src/share/vm/gc/parallel/psPromotionManager.cpp

Print this page




 472 
 473 void ObjArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
 474   assert(obj->is_objArray(), "obj must be obj array");
 475   PushContentsClosure cl(pm);
 476   oop_oop_iterate_elements<true>(objArrayOop(obj), &cl);
 477 }
 478 
 479 void TypeArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
 480   assert(obj->is_typeArray(),"must be a type array");
 481   ShouldNotReachHere();
 482 }
 483 
 484 oop PSPromotionManager::oop_promotion_failed(oop obj, markOop obj_mark) {
 485   assert(_old_gen_is_full || PromotionFailureALot, "Sanity");
 486 
 487   // Attempt to CAS in the header.
 488   // This tests if the header is still the same as when
 489   // this started.  If it is the same (i.e., no forwarding
 490   // pointer has been installed), then this thread owns
 491   // it.
 492   if (obj->cas_forward_to(obj, obj_mark)) {
 493     // We won any races, we "own" this object.
 494     assert(obj == obj->forwardee(), "Sanity");
 495 
 496     _promotion_failed_info.register_copy_failure(obj->size());
 497 
 498     push_contents(obj);
 499 
 500     _preserved_marks->push_if_necessary(obj, obj_mark);



 501   }  else {
 502     // We lost, someone else "owns" this object
 503     guarantee(obj->is_forwarded(), "Object must be forwarded if the cas failed.");
 504 


 505     // No unallocation to worry about.
 506     obj = obj->forwardee();
 507   }
 508 
 509   log_develop_trace(gc, scavenge)("{promotion-failure %s " PTR_FORMAT " (%d)}", obj->klass()->internal_name(), p2i(obj), obj->size());
 510 
 511   return obj;
 512 }


 472 
 473 void ObjArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
 474   assert(obj->is_objArray(), "obj must be obj array");
 475   PushContentsClosure cl(pm);
 476   oop_oop_iterate_elements<true>(objArrayOop(obj), &cl);
 477 }
 478 
 479 void TypeArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) {
 480   assert(obj->is_typeArray(),"must be a type array");
 481   ShouldNotReachHere();
 482 }
 483 
 484 oop PSPromotionManager::oop_promotion_failed(oop obj, markOop obj_mark) {
 485   assert(_old_gen_is_full || PromotionFailureALot, "Sanity");
 486 
 487   // Attempt to CAS in the header.
 488   // This tests if the header is still the same as when
 489   // this started.  If it is the same (i.e., no forwarding
 490   // pointer has been installed), then this thread owns
 491   // it.
 492   if (obj->cas_forward_to(obj, obj_mark, memory_order_relaxed)) {
 493     // We won any races, we "own" this object.
 494     assert(obj == obj->forwardee(), "Sanity");
 495 
 496     _promotion_failed_info.register_copy_failure(obj->size());
 497 
 498     push_contents(obj);
 499 
 500     _preserved_marks->push_if_necessary(obj, obj_mark);
 501 
 502     log_develop_trace(gc, scavenge)("{promotion-failure %s " PTR_FORMAT " (%d)}", obj->klass()->internal_name(), p2i(obj), obj->size());
 503 
 504   }  else {
 505     // We lost, someone else "owns" this object
 506     guarantee(obj->is_forwarded(), "Object must be forwarded if the cas failed.");
 507 
 508     log_develop_trace(gc, scavenge)("{promotion-failure %s " PTR_FORMAT "}", obj->klass()->internal_name(), p2i(obj));
 509 
 510     // No unallocation to worry about.
 511     obj = obj->forwardee();
 512   }
 513 


 514   return obj;
 515 }
< prev index next >