< prev index next >

src/share/vm/gc/g1/dirtyCardQueue.cpp

Print this page
rev 8802 : G1 performance improvements: card batching, joining, sorting, prefetching and write barrier fence elision and simplification based on a global syncrhonization using handshakes piggybacking on thread-local safepoints.

*** 68,78 **** #pragma warning( disable:4355 ) // 'this' : used in base member initializer list #endif // _MSC_VER DirtyCardQueueSet::DirtyCardQueueSet(bool notify_when_complete) : PtrQueueSet(notify_when_complete), - _mut_process_closure(NULL), _shared_dirty_card_queue(this, true /*perm*/), _free_ids(NULL), _processed_buffers_mut(0), _processed_buffers_rs_thread(0) { _all_active = true; --- 68,77 ----
*** 81,95 **** // Determines how many mutator threads can process the buffers in parallel. uint DirtyCardQueueSet::num_par_ids() { return (uint)os::processor_count(); } ! void DirtyCardQueueSet::initialize(CardTableEntryClosure* cl, Monitor* cbl_mon, Mutex* fl_lock, int process_completed_threshold, int max_completed_queue, Mutex* lock, PtrQueueSet* fl_owner) { ! _mut_process_closure = cl; PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, max_completed_queue, fl_owner); set_buffer_size(G1UpdateBufferSize); _shared_dirty_card_queue.set_lock(lock); _free_ids = new FreeIdSet((int) num_par_ids(), _cbl_mon); --- 80,94 ---- // Determines how many mutator threads can process the buffers in parallel. uint DirtyCardQueueSet::num_par_ids() { return (uint)os::processor_count(); } ! void DirtyCardQueueSet::initialize(bool should_do_processing, Monitor* cbl_mon, Mutex* fl_lock, int process_completed_threshold, int max_completed_queue, Mutex* lock, PtrQueueSet* fl_owner) { ! _should_do_processing = should_do_processing; PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, max_completed_queue, fl_owner); set_buffer_size(G1UpdateBufferSize); _shared_dirty_card_queue.set_lock(lock); _free_ids = new FreeIdSet((int) num_par_ids(), _cbl_mon);
*** 139,150 **** thread->set_claimed_par_id(worker_i); } bool b = false; if (worker_i != UINT_MAX) { ! b = DirtyCardQueue::apply_closure_to_buffer(_mut_process_closure, buf, 0, _sz, true, worker_i); if (b) Atomic::inc(&_processed_buffers_mut); // If we had not claimed an id before entering the method // then we must release the id. if (!already_claimed) { --- 138,151 ---- thread->set_claimed_par_id(worker_i); } bool b = false; if (worker_i != UINT_MAX) { ! BufferedRefineCardTableEntryClosure cl; ! b = DirtyCardQueue::apply_closure_to_buffer(_should_do_processing ? &cl : NULL, buf, 0, _sz, true, worker_i); + cl.flush_buffer(); if (b) Atomic::inc(&_processed_buffers_mut); // If we had not claimed an id before entering the method // then we must release the id. if (!already_claimed) {
< prev index next >