diff -r a2956337451b -r c81fbf340ceb src/hotspot/share/gc/g1/g1DirtyCardQueue.cpp --- a/src/hotspot/share/gc/g1/g1DirtyCardQueue.cpp Fri Mar 22 16:16:10 2019 -0400 +++ b/src/hotspot/share/gc/g1/g1DirtyCardQueue.cpp Fri Mar 22 15:42:43 2019 -0400 @@ -56,21 +56,18 @@ } }; -G1DirtyCardQueue::G1DirtyCardQueue(G1DirtyCardQueueSet* qset, bool permanent) : +G1DirtyCardQueue::G1DirtyCardQueue(G1DirtyCardQueueSet* qset) : // Dirty card queues are always active, so we create them with their // active field set to true. - PtrQueue(qset, permanent, true /* active */) + PtrQueue(qset, true /* active */) { } G1DirtyCardQueue::~G1DirtyCardQueue() { - if (!is_permanent()) { - flush(); - } + flush(); } G1DirtyCardQueueSet::G1DirtyCardQueueSet(bool notify_when_complete) : PtrQueueSet(notify_when_complete), - _shared_dirty_card_queue(this, true /* permanent */), _free_ids(NULL), _processed_buffers_mut(0), _processed_buffers_rs_thread(0), @@ -90,10 +87,8 @@ void G1DirtyCardQueueSet::initialize(Monitor* cbl_mon, BufferNode::Allocator* allocator, - Mutex* lock, bool init_free_ids) { PtrQueueSet::initialize(cbl_mon, allocator); - _shared_dirty_card_queue.set_lock(lock); if (init_free_ids) { _free_ids = new G1FreeIdSet(0, num_par_ids()); } @@ -217,13 +212,7 @@ } closure; Threads::threads_do(&closure); - shared_dirty_card_queue()->reset(); -} - -void G1DirtyCardQueueSet::concatenate_log(G1DirtyCardQueue& dcq) { - if (!dcq.is_empty()) { - dcq.flush(); - } + G1BarrierSet::shared_dirty_card_queue().reset(); } void G1DirtyCardQueueSet::concatenate_logs() { @@ -234,16 +223,16 @@ size_t old_limit = max_completed_buffers(); set_max_completed_buffers(MaxCompletedBuffersUnlimited); - class ConcatenateThreadLogClosure : public ThreadClosure { - G1DirtyCardQueueSet* _qset; - public: - ConcatenateThreadLogClosure(G1DirtyCardQueueSet* qset) : _qset(qset) {} + struct ConcatenateThreadLogClosure : public ThreadClosure { virtual void do_thread(Thread* t) { - _qset->concatenate_log(G1ThreadLocalData::dirty_card_queue(t)); + G1DirtyCardQueue& dcq = G1ThreadLocalData::dirty_card_queue(t); + if (!dcq.is_empty()) { + dcq.flush(); + } } - } closure(this); + } closure; Threads::threads_do(&closure); - concatenate_log(_shared_dirty_card_queue); + G1BarrierSet::shared_dirty_card_queue().flush(); set_max_completed_buffers(old_limit); }