8269821: Remove is-queue-active check in inner loop of write_ref_array_pre_work

Reviewed-by: ayang, kbarrett
This commit is contained in:
Thomas Schatzl 2021-07-05 07:24:10 +00:00
parent 4da52eaf53
commit 675a9520b2

View File

@ -71,12 +71,16 @@ void G1BarrierSet::enqueue(oop pre_val) {
template <class T> void
G1BarrierSet::write_ref_array_pre_work(T* dst, size_t count) {
if (!_satb_mark_queue_set.is_active()) return;
G1SATBMarkQueueSet& queue_set = G1BarrierSet::satb_mark_queue_set();
if (!queue_set.is_active()) return;
SATBMarkQueue& queue = G1ThreadLocalData::satb_mark_queue(Thread::current());
T* elem_ptr = dst;
for (size_t i = 0; i < count; i++, elem_ptr++) {
T heap_oop = RawAccess<>::oop_load(elem_ptr);
if (!CompressedOops::is_null(heap_oop)) {
enqueue(CompressedOops::decode_not_null(heap_oop));
queue_set.enqueue_known_active(queue, CompressedOops::decode_not_null(heap_oop));
}
}
}