269 oop forwardee = o->forward_to_atomic(new_obj, test_mark, memory_order_relaxed);
270 if (forwardee == nullptr) { // forwardee is null when forwarding is successful
271 // We won any races, we "own" this object.
272 assert(new_obj == o->forwardee(), "Sanity");
273
274 // Increment age if obj still in new generation. Now that
275 // we're dealing with a markWord that cannot change, it is
276 // okay to use the non mt safe oop methods.
277 if (!new_obj_is_tenured) {
278 new_obj->incr_age();
279 assert(young_space()->contains(new_obj), "Attempt to push non-promoted obj");
280 }
281
282 ContinuationGCSupport::transform_stack_chunk(new_obj);
283
284 // Do the size comparison first with new_obj_size, which we
285 // already have. Hopefully, only a few objects are larger than
286 // _min_array_size_for_chunking, and most of them will be arrays.
287 // So, the is->objArray() test would be very infrequent.
288 if (new_obj_size > _min_array_size_for_chunking &&
289 new_obj->is_objArray() &&
290 PSChunkLargeArrays) {
291 push_objArray(o, new_obj);
292 } else {
293 // we'll just push its contents
294 push_contents(new_obj);
295
296 if (StringDedup::is_enabled() &&
297 java_lang_String::is_instance(new_obj) &&
298 psStringDedup::is_candidate_from_evacuation(new_obj, new_obj_is_tenured)) {
299 _string_dedup_requests.add(o);
300 }
301 }
302 return new_obj;
303 } else {
304 // We lost, someone else "owns" this object.
305
306 assert(o->is_forwarded(), "Object must be forwarded if the cas failed.");
307 assert(o->forwardee() == forwardee, "invariant");
308
309 if (new_obj_is_tenured) {
|
269 oop forwardee = o->forward_to_atomic(new_obj, test_mark, memory_order_relaxed);
270 if (forwardee == nullptr) { // forwardee is null when forwarding is successful
271 // We won any races, we "own" this object.
272 assert(new_obj == o->forwardee(), "Sanity");
273
274 // Increment age if obj still in new generation. Now that
275 // we're dealing with a markWord that cannot change, it is
276 // okay to use the non mt safe oop methods.
277 if (!new_obj_is_tenured) {
278 new_obj->incr_age();
279 assert(young_space()->contains(new_obj), "Attempt to push non-promoted obj");
280 }
281
282 ContinuationGCSupport::transform_stack_chunk(new_obj);
283
284 // Do the size comparison first with new_obj_size, which we
285 // already have. Hopefully, only a few objects are larger than
286 // _min_array_size_for_chunking, and most of them will be arrays.
287 // So, the is->objArray() test would be very infrequent.
288 if (new_obj_size > _min_array_size_for_chunking &&
289 new_obj->is_refArray() &&
290 PSChunkLargeArrays) {
291 push_objArray(o, new_obj);
292 } else {
293 // we'll just push its contents
294 push_contents(new_obj);
295
296 if (StringDedup::is_enabled() &&
297 java_lang_String::is_instance(new_obj) &&
298 psStringDedup::is_candidate_from_evacuation(new_obj, new_obj_is_tenured)) {
299 _string_dedup_requests.add(o);
300 }
301 }
302 return new_obj;
303 } else {
304 // We lost, someone else "owns" this object.
305
306 assert(o->is_forwarded(), "Object must be forwarded if the cas failed.");
307 assert(o->forwardee() == forwardee, "invariant");
308
309 if (new_obj_is_tenured) {
|