403 // that specific collector in mind, and the documentation above suitably |
403 // that specific collector in mind, and the documentation above suitably |
404 // extended and updated. |
404 // extended and updated. |
405 oop CollectedHeap::new_store_pre_barrier(JavaThread* thread, oop new_obj) { |
405 oop CollectedHeap::new_store_pre_barrier(JavaThread* thread, oop new_obj) { |
406 // If a previous card-mark was deferred, flush it now. |
406 // If a previous card-mark was deferred, flush it now. |
407 flush_deferred_store_barrier(thread); |
407 flush_deferred_store_barrier(thread); |
408 if (can_elide_initializing_store_barrier(new_obj)) { |
408 if (can_elide_initializing_store_barrier(new_obj) || |
|
409 new_obj->is_typeArray()) { |
|
410 // Arrays of non-references don't need a pre-barrier. |
409 // The deferred_card_mark region should be empty |
411 // The deferred_card_mark region should be empty |
410 // following the flush above. |
412 // following the flush above. |
411 assert(thread->deferred_card_mark().is_empty(), "Error"); |
413 assert(thread->deferred_card_mark().is_empty(), "Error"); |
412 } else { |
414 } else { |
413 MemRegion mr((HeapWord*)new_obj, new_obj->size()); |
415 MemRegion mr((HeapWord*)new_obj, new_obj->size()); |