< prev index next >

src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp

Print this page

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

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