--- old/src/share/vm/gc/parallel/psPromotionManager.cpp 2016-10-03 22:57:55.000000000 +0900 +++ new/src/share/vm/gc/parallel/psPromotionManager.cpp 2016-10-03 22:57:55.000000000 +0900 @@ -489,7 +489,7 @@ // this started. If it is the same (i.e., no forwarding // pointer has been installed), then this thread owns // it. - if (obj->cas_forward_to(obj, obj_mark)) { + if (obj->cas_forward_to(obj, obj_mark, memory_order_relaxed)) { // We won any races, we "own" this object. assert(obj == obj->forwardee(), "Sanity"); @@ -498,15 +498,18 @@ push_contents(obj); _preserved_marks->push_if_necessary(obj, obj_mark); + + log_develop_trace(gc, scavenge)("{promotion-failure %s " PTR_FORMAT " (%d)}", obj->klass()->internal_name(), p2i(obj), obj->size()); + } else { // We lost, someone else "owns" this object guarantee(obj->is_forwarded(), "Object must be forwarded if the cas failed."); + log_develop_trace(gc, scavenge)("{promotion-failure %s " PTR_FORMAT "}", obj->klass()->internal_name(), p2i(obj)); + // No unallocation to worry about. obj = obj->forwardee(); } - log_develop_trace(gc, scavenge)("{promotion-failure %s " PTR_FORMAT " (%d)}", obj->klass()->internal_name(), p2i(obj), obj->size()); - return obj; }